Python:向基类的列表/元组成员追加内容
我刚才被问到这个问题,想了半天也没想到一个很好的Python解决方案,所以我想把这个问题放在这里,看看大家有什么更好的想法。
在一个父类中,扩展一个基类的变量,比如元组、列表等等,最好的方法是什么呢?
下面这个方法是可行的……
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)
但是这样做似乎不太符合Python的风格,因为你需要通过基类的名字来引用它,如果基类的名字改了,你就得更新代码。有没有更好的方法呢?
2 个回答
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
就像一个“常量”变量,你可以改变它继承的内容,其他所有地方都会自动更新。
2
BaseClass
在 BaseClass.some_class_member
中并不代表 AnotherClass
的父类。它只是
BaseClass.some_class_member
。你可以在不创建对象的情况下直接访问它。
>>> BaseClass.some_class_member
(1, 2, 3, 4, 5)
如果你的目的是在不创建对象的情况下访问这个值,简单的答案是 no
。不过,如果是在创建对象之后访问这个值呢?
那怎么样呢?
class AnotherClass(BaseClass):
def __init__(self):
self.some_class_member += (6, 7,)