这个视频有点问题呀

来源: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,其他属性不能绑定。

http://img.mukewang.com/climg/5dba3b630925c13904900748.jpg

如果我解决了同学的问题,请采纳!学习愉快^_^。


1
heiHelloPython
h 明白了,谢谢老师
h019-10-31
共1条回复

leiHelloPython

提问者

2019-10-30

是不是说明子类是不受父类的__slots__限制的?

0

0 学习 · 8160 问题

查看课程