Python类对象、实例对象、类属性和实例属性等

类:使用 class 关键字定义的。如 :class Student

类对象:利用 class 声明出来的类,如 Student 就是类对象。

实例对象:根据类对象创建出来的对象叫类的实例。例如:stu = Student(),其中 stu 就是实例对象。

类属性:定义在类里面、方法外面的属性叫做类属性。通常用来记录与这个类相关的特征。

实例属性:对象的属性叫做实例属性。定义在 __init__() 方法中(self.属性名),用来记录对象的特征。

实例化:创建对象这个动作称为类的实例化。

对象调用的方法叫做实例方法。

代码演示:

class Student:  # Student是类对象
    # 类属性:stu_count、stu_info
    stu_count = 0  # 用来记录一共有多少个学生
    stu_info = {}  # 用来存储学生信息

    def __init__(self, name, age):
        # 实例属性:name、age
        self.name = name
        self.age = age

        # 对类属性的计数加1
        Student.stu_count += 1
        Student.stu_info[name] = age


# stu1/stu2/stu3/stu4/stu5 是实例对象
stu1 = Student('张三', 15)
stu2 = Student('李四', 13)
stu3 = Student('王五', 14)
stu4 = Student('麻六', 16)
stu5 = Student('陆七', 15)
# 输出学生总人数
print(Student.stu_count)  # 5
print(Student.stu_info)  # {'张三': 15, '李四': 13, '王五': 14, '麻六': 16, '陆七': 15}

输出结果:

5
{‘张三’: 15, ‘李四’: 13, ‘王五’: 14, ‘麻六’: 16, ‘陆七’: 15}

实例对象

一个类可以创建多个实例对象,每个对象都各自拥有自己的实例属性,通过 self. 来访问自己的属性和调用自己的方法。

这每一个对象都有自己独立的内存空间,保存着各自不同的属性,而多个对象的方法,在内存中只有一份,保存在类所在的内存空间,在调用这个方法时,只需要把对象的引用传递到方法内部(方法的第一个参数)

图片[1]-Python类对象、实例对象、类属性和实例属性等-尤尤'blog

实例属性

对象的属性叫做实例属性。定义在 __init__() 方法中(self.属性名),用来记录对象的特征。

1)获取对象属性

a、在类外面获取对象的属性:对象名.属性名

b、在类里面获取对象的属性:self.属性名

class Student:

    def __init__(self, name, age, iphone):
        self.name = name
        self.age = age
        self.iphone = iphone

    def display(self):
        # 类里面获取对象属性:self.属性名
        print(f'我的名字叫{self.name},今年{self.age}岁,我的电话是{self.iphone}')


stu = Student('张三',21,'13672829899')
stu1 = Student('李四',19,'12345617899')

# 类外面获取属性:对象名.属性名
print(stu.name)
stu.display()

输出结果:

张三
我的名字叫张三,今年21岁,我的电话是13672829899

2)添加对象属性(实例属性)

1)类里面添加属性

在 __init__() 方法中,使用 self.属性名 = 值 来添加属性。推荐使用这个方法。

class Student:

    def __init__(self, name, age, iphone):
        self.name = name
        self.age = age
        self.iphone = iphone

stu = Student('张三',21,'13672829899')
stu1 = Student('李四',19,'12345617899')

如果我们不知道该给某一个属性设置什么初始值,可以设置为 None(表示什么都没有)。

None 表示一个空对象,没有方法和属性,是一个特殊的常量。

2)动态绑定属性和方法(在类的外面)

如果不想修改类,但是需要临时给某个对象添加属性,可以在类外面通过 “.” 给对象临时添加属性对象名.属性名 = 值

class Student:

    def __init__(self, name, age, iphone):
        self.name = name
        self.age = age
        self.iphone = iphone

    def display(self):
        print(f'我的名字叫{self.name},今年{self.age}岁,我的电话是{self.iphone}')


stu = Student('张三',21,'13672829899')
stu1 = Student('李四',19,'12345617899')

# 给stu对象临时添加属性gender
stu.gender = '男'
print(stu.gender)    # 男

print('------动态绑定方法------')


def eat():
    print('我在吃饭')


stu.eat = eat   # 动态绑定方法,这就相当于把一个函数名赋值给一个变量,调用这个变量和调用函数名的功能是一样的
stu.eat()

在类外面临时添加的属性只对添加了这个属性的对象有效,没有添加这个属性的对象,不可以使用这个属性。且添加属性的代码必须在使用这个属性的前面,否则程序报错。

class Student:

    def __init__(self, name, age, iphone):
        self.name = name
        self.age = age
        self.iphone = iphone

    def display(self):
        print(f'我的名字叫{self.name},今年{self.age}岁,我的电话是{self.iphone}')


stu = Student('张三',21,'13672829899')
stu1 = Student('李四',19,'12345617899')

# 给stu对象临时添加属性gender
stu.gender = '男'
print(stu.gender)

# 并没有给stu1添加gender属性,所以报错
print(stu1.gender) # AttributeError: 'Student' object has no attribute 'gender'
图片[2]-Python类对象、实例对象、类属性和实例属性等-尤尤'blog

注意:在类外面临时添加属性的方法虽然简单,但是不推荐使用,因为在运行的时候,如果找不到属性,就会报错。所以对象的属性应该封装在类中

类属性

在类里面直接定义的变量。它被该类的所有对象共享。

1)访问类属性

类名.属性名 。例如 People.birth_place

对象名.属性名 。例如 people.birth_place,这种方法不推荐。容易产生混淆。

Python 中获取属性存在一个向上查找机制,比喻说 people.birth_place,它首先在对象内部查找对象属性,如果没找到就会向上寻找类属性。

图片[3]-Python类对象、实例对象、类属性和实例属性等-尤尤'blog

2)修改类属性

通过 类名.类属性=值 来修改属性的值。

如果使用 对象名.类属性 = 值,只会给对应对象临时添加一个实例属性,而不会影响到类属性的值。

class People:
    # 类属性:定义在类里面,方法之外的变量
    birth_place = '四川'

    def display(self):  # self是对类当前实例的引用,用于访问类属性
        print(f'我来自{self.birth_place}')

p1 = People()
p2 = People()

print(p1.birth_place)       # 访问类属性:对象名.类属性     不推荐使用
print(People.birth_place)   # 访问类属性:类名.类属性

# p1.display()

# 针对people这个实例对象添加了一个新的属性,并不会影响类属性的值:对象名.类属性 = 值
p1.birth_place = '吉林'   # python解释器会先在p1对象中查找是否有birth_place这个属性,如果没有,就在对象中直接添加这个属性。

# 只是对p1这个实例对象增加了一个属性,People类的类属性值并没有变
print(p1.birth_place)       # 吉林
print(p2.birth_place)       # 四川
print(People.birth_place)   # 四川

# 修改类属性birth_place:类名.类属性 = 值
People.birth_place = '吉林'

# 类属性被该类的所有对象共享,一经修改,所有对象访问到的值也跟着变
print(p1.birth_place)       # 吉林
print(p2.birth_place)       # 吉林
print(People.birth_place)   # 吉林
图片[4]-Python类对象、实例对象、类属性和实例属性等-尤尤'blog
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容