Discuss / Python / 逆天了?

逆天了?

Topic source

神月宗

#1 Created at ... [Delete] [Delete and Lock User]

-- coding:utf-8 --

class Animal(object): slots = ('name','age')

class Cat(Animal): pass

c = Cat() c.name = 'Chris iven' c.age = 19 c.score = 89 print c.name,c.age,c.score 竟然没报错?然后把c换成Animal的话就会出错: 报错类型:AttributeError: 'Animal' object has no attribute 'score'

输出:Chris iven 19 89 1000

##有毒...

上课不认真,廖老师明明讲的清清楚楚。

使用__slots__要注意,__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的;除非在子类中也定义__slots__,这样,子类实例允许定义的属性就是自身的__slots__加上父类的__slots__。

神月宗

#3 Created at ... [Delete] [Delete and Lock User]

你这么厉害?解释解释啊!

blessing_zm

#4 Created at ... [Delete] [Delete and Lock User]

就是slots只对animal类起作用,对它的子类Cat不起作用,除非在子类Cat中也定义变量slots

建议你回去再复习一下继承的相关概念

class Animal(object): slots = ('name','age')

要限制对象的实例,一定要用"__slots__"这个特殊的变量,你这里定义的slots这个类变量是不起作用的


  • 1

Reply