这个视频有点问题呀
来源:3-3 类的高级特性之slots
leiHelloPython
2019-10-30 19:15:05
这里的父类PetCat的__slots__里面只有name和age两个属性,然后HuaCat类继承了PetCat,把__slots__增加color那一行注释掉,然后再给HuaCat的实例增加color属性,好像还是可以运行的呀。
class PetCat(object): """ 家猫类 """ __slots__ = ('name', 'age') def __init__(self, name, age): """ 构造方法 :param name: 猫吃的名称 :param age: 猫的年龄 """ self.name = name # 私有属性,不能给你们操作 self.age = age # 描述符 @property def show_info(self): """ 显示猫的信息 """ return '我叫:{0},今年{1}岁'.format(self.name, self.age) class HuaCat(PetCat): """ 中华田园猫 """ # __slots__ = ('color', ) pass if __name__ == '__main__': cat_white = HuaCat('小白', 3) rest = cat_white.show_info print(rest) cat_white.color = '白色' print(cat_white.color)
2回答
好帮手乔木
2019-10-31
同学你好:
__slots__定义的属性,方法仅对当前类起作用,对继承的子类是不起作用的,如果子类中也定义__slots__,那么子类允许定义的属性,方法就是自身的__slots__加上父类的__slots__。
例如:HuaCat定义了__slots__方法,那么就会继承PetCat的__slots__方法,绑定属性时,只能绑定name,age,color,其他属性不能绑定。
如果我解决了同学的问题,请采纳!学习愉快^_^。
leiHelloPython
提问者
2019-10-30
是不是说明子类是不受父类的__slots__限制的?
相似问题