Python - 为什么删除了继承对象的&属性?

时间:2014-12-10 12:07:13

标签: python inheritance

为什么删除继承对象的属性?

class A(object):
    def delete(self):
        pass
    def dont_delete(self):
        pass


class B(A):
    pass

del A.delete
del B.dont_delete
AttributeError: dont_delete

1 个答案:

答案 0 :(得分:2)

dont_delete未复制到B;您只能从对象中删除直接属性

Python通过委托继承链来查找实例和类的属性,而不是通过将属性复制到子类。因此,没有什么可以从子类中删除。

你不应该尝试'uninherit';当您使用A作为基类时,您实际上声明BA相同,只是更专业。该过程只应添加属性,而不是删除。相应地设计你的课程;例如,使用mixin基类来表示不应该总是继承的属性和方法。