首页 > 解决方案 > 将超级实例保存为类的变量是否被认为是一种好习惯?

问题描述

让我有一个Dog继承自的类,Animal执行以下操作是否被认为是一种好习惯:

class Dog(Animal):
    def __init__(self):
        self.__parentcls__ = super(Dog, self)

还是应该在super(Dog, self)每次需要访问父类时都这样做?

标签: python

解决方案


正如评论已经表明的那样,这里没有理由违反约定。superpython 开发人员已经可以直接使用。

您应该注意,在 python3 中,您使用super(), not super(Dog, self),这自然使其更具可读性。

此外,您的方法的另一个缺点是它创建了一个引用循环(self 引用了超级对象,它引用了 self,或者:)self.__parentcls__.__self__ is self。虽然这不一定是个问题(python 可以很好地处理引用循环),但它可能会带来一些开销(例如,对象不会尽快被销毁,只有在 gc 循环运行时)。

编辑:@Mehul 恰当地指出了您方法的另一个真正缺点:基本上,它对子类不友好。


推荐阅读