实例属性:
- 通过实例直接添加属性,例如 dog.color
- 通过self添加属性,例如 self.color
类属性:直接在类中定义一个属性,例如
class student:
color = red
说明:实例可以继承类的属性,如果实例没有重写该属性,将可以使用类的属性,如果实例已经重写了该属性,将用实例自己的属性
练习:为了统计学生人数,可以给Student类增加一个类属性,每创建一个实例,该属性自动增加:
class Student(object):
count = 0
def __init__(self, name):
self.name = name
答案:我的想法是,首先创建类实例,是怎么一个过程?代码如何知道用户创建了一个类实例?通过百度,我们知道,一个类,如果被实例化,就会默认执行一次init()函数,那么,我们就可以在init()函数里对count属性进行累加。 那我们到底是Student.count+=1 呢? 还是self.count+=1 ? 分析一下, self.count,是实例本身的的属性,一个实例对应一个count, 那这样是无法 统计总数的。 所以必须用类的属性,类的属性是所有实例都能共享访问的。 所以就写Student.count+=1 , 能在init()写出这个Student.count+=1, 是很不容易的,1, 首先,老师的例子,是将类属性直接写在类定义的下边,很容易让人误以为这是死格式,不能写到类中的函数里。2,对于类的实例化,是执行init函数,而不会执行类本身,所以类里边的count=0 是不会执行的,count 是不会在每次类实例化的时候,被初始为0的。3,更难的一点是,是要能理解,Student.count 的值,是存储在哪里的?在程序退出后,其值是否会被初始化?这点还需要思考。