Python:附加到基类列表/元组成员

时间:2014-06-18 14:10:28

标签: python

刚才我被问到这个问题,想不出一个pythonic解决方案,所以我想我会把它扔出去以获得更好的观点。

在超类中扩展基类变量元组/列表等的最佳方法是什么?

以下作品......

class BaseClass(object):
    some_class_member = (1, 2, 3, 4, 5,)


class AnotherClass(BaseClass):
    some_class_member = BaseClass.some_class_member + (6, 7,)

a = BaseClass()
a.some_class_member  # (1, 2, 3, 4, 5)

b = AnotherClass()
b.some_class_member  # (1, 2, 3, 4, 5, 6, 7)

但是因为你必须按名称引用BaseClass所以看起来并不是非常pythonic所以如果名称改变则必须更新它。有没有更好的方法来解决这个问题?

2 个答案:

答案 0 :(得分:3)

我可以看到你的观点,但是,由于你将它指定为新子类的父级,你已经按名称引用了BaseClass

为了"如果名称改变了怎么办?"方案,您可以提供另一层继承:

class MyBaseClass(BaseClass):
    """ This is here so that all of my classes just inherits from this one """


class AnotherClass(MyBaseClass):
    super_special_member = MyBaseClass.super_special_member + (6, 7, )


class ClassThatDoesntNeedSuperSpecialMember(MyBaseClass):
    """ Cool. """

MyBaseClass将作为一种常数"变量,你可以改变它继承的内容,其他一切都会自动更新。

答案 1 :(得分:1)

BaseClass中的

BaseClass.some_class_member并不代表super的{​​{1}}。它只是

AnotherClass。您无需实例化即可访问。

BaseClass.some_class_member

如果您的目的是在没有实例化的情况下访问该值,那么简单的答案就是 >>> BaseClass.some_class_member (1, 2, 3, 4, 5) 。 但是,要在实例化后访问该值。

怎么样?

no