刚才我被问到这个问题,想不出一个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所以如果名称改变则必须更新它。有没有更好的方法来解决这个问题?
答案 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