类和实例对象是有区别的,类是抽象,是模板,而实例则是根据类创建的对象,比如类:动物,只是一个抽象,并没有动物的详细信息,而猫、狗等,则是具体的动物,是类的对象。
在前面,实例对象绑定的属性只属于这个实例,绑定在一个实例上的属性不会影响其它实例;同样的,类也可以绑定属性,但是类的属性不属于任何一个对象,而是属于这个类。如果在类上绑定一个属性,则所有实例都可以访问类的属性,并且,所有实例访问的类属性都是同一个!也就是说,实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。
定义类属性可以直接在 class 中定义,比如在前面的Animal类中,加入地域的类属性:
class Animal(object): localtion = 'Asia' def __init__(self, name, age): self.name = name self.age = age
在上面的代码中,localtion就是属于Animal这个类的类属性,此后,通过Animal()实例化的所有对象,都可以访问到localtion,并且得到唯一的结果。
dog = Animal('wangwang', 1) cat = Animal('mimi', 3) print(dog.localtion) # ==> Asia print(cat.localtion) # ==> Asia # 类属性,也可以通过类名直接访问 print(Animal.localtion) # ==> Asia
类属性也是可以动态添加和修改的,需要注意的是,因为类属性只有一份,所以改变了,所有实例可以访问到的类属性都会变更:
Animal.localtion = 'Africa' print(cat.localtion) # ==>Africa print(dog.localtion) # ==>Africa
请给 Animal类添加一个类属性 count,每创建一个实例,count 属性就加 1,这样就可以统计出一共创建了多少个 Animal的实例。
参考答案:
class Animal(object): count = 0 def __init__(self, name, age): self.name = name self.age = age Animal.count += 1 dog = Animal('wangwang', 1) print(Animal.count) cat = Animal('mimi', 3) print(Animal.count) pig = Animal('panpan', 1) print(Animal.count)
请验证,完成请求
由于请求次数过多,请先验证,完成再次请求
打开微信扫码自动绑定
绑定后可得到
使用 Ctrl+D 可将课程添加到书签
举报