这个视频有点问题呀
来源: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__限制的?
相似问题