81.类属性
类属性是从属于“类对象”的属性
,也称为“类变量”
。由于,类属性
从属于类对象,可以 被所有实例对象共享
。
类属性的定义方式:
class 类名:
类变量名= 初始值
在类中或者类的外面,我们可以通过:“类名.类变量名”来读写。
【操作】 类属性的使用测试
# 类属性(也就是 模具 的 属性 或者叫 变量, 可以被所有 实例对象(创建的饼干) 共享)
class Student_01: # 很重要 很重要 很重要 很重要
company = "haizeiwang" # 类属性
count = 0 # 类属性
def __init__(self, name, score):
self.name = name # 实例属性
self.score = score
Student_01.count = Student_01.count+1
def say_score(self): # 实例方法 会被加载到 模具 也就是类里面 以及 把地址 给 造出来的饼干(也就是 实例对象 )去 调用
# 虽然 实例方法 从属于 实例对象 但是 运行期 代码在 模具里面
print('我来自:', Student_01.company)
print(self.name, '的分数是:', self.score)
k2 = Student_01('张三', 80) # k2是实例对象,自动调用__init__()方法,这个方法是 两个 下划线 不要忘记了
k2.say_score()
k3 = Student_01('lixiao', 60)
k4 = Student_01('lidepeng', 100)
print('一共创建{0}个Student对象'.format(Student_01.count))
# tips: 注意区分 类属性和 实例属性的区别。
# 类属性 是 创建在 类里面的属性。
# 而实例属性 是 写在 `self` 上的属性。
# 而每个类都有 初始化的 实例属性。 他们的初始值相同。
# 但是 在 实例 1 上 修改 之后 。
# 实例 2 的属性值 是不变的。
In [3]: k3.company # 可以看到 k3 修改了 所谓的类属性。 但是 其实 是通过 k3 调用的 所以 本质还是 实例属性。
Out[3]: 'haizeiwang'
In [4]: k3.company='biu'
In [5]: k4.company # k3 修改之后 k4 的 company 属性没有改变
Out[5]: 'haizeiwang'
In [6]: Student_01.company # 而这才是真正的 类属性。
Out[6]: 'haizeiwang'
In [7]: Student_01.company='biubiu' # 当我修改了 类属性 之后
In [8]: k4.company # k4 没有 在实例对象上修改过。 所以 他还是 共享的 类属性的值
Out[8]: 'biubiu'
In [9]: k3.company # k3 实例对象 自己修改过了。 所以他 使用他自己的 属性值。
Out[9]: 'biu'
运行结果:
我来自: haizeiwang
张三 的分数是: 80
一共创建3个Student对象