类属性:直接在class中定义的是类属性
class Student(object):
name="xiaoming"
实例属性:实例属性必须通过实例来绑定,比如
self.name = "xiaoming"
下面直接代码分析:
>>class Student(object):
name="xiaoming"
>>s = Student()
>print(s.name)#由于没有实例的name属性,所以会继续查找类的name属性(类属性)
xiaoming
>Student.name #这样与上述实例调用一致,都是调用的类属性
xiaoming
>s.name = "xiaogang" #这时就给实例绑定上了name属性(实例属性)
>print(s.name)
xiaogang #由于实例属性的优先级较高,会屏蔽掉类的name属性
>print(Student.name)
xiaoming #虽然实例绑定上了实例属性name,但是类属性并没有消失
>del s.name #删除实例的name属性
>print(s.name)
xiaoming #再次调用s.name,由于实例属性name属性没有被找到,类的name属性就显#示出来了
key Points:
编写程序的时候,千万不要把实例属性和类属性使用相同的名字