【发布时间】:2012-07-25 10:13:12
【问题描述】:
我正在尝试找到扩展类变量的最佳方法。希望到目前为止我提出的方法的一个示例可以说明这一点。
class A(object):
foo = ['thing', 'another thing']
class B(A):
foo = A.foo + ['stuff', 'more stuff']
所以我试图让子类继承并扩展父类的类变量。上面的方法有效,但似乎有点笨拙。我愿意接受任何建议,包括使用完全不同的方法完成类似的事情。
显然,如果需要,我可以继续使用此方法,但如果有更好的方法,我想找到它。
【问题讨论】:
-
foo需要成为 class property 而不仅仅是实例属性是什么? (就此而言,鉴于列表是可变的,您可以在__init__时间更改类属性。) -
恕我直言,你所拥有的对我来说看起来不错(我想不出更干净的方法来做到这一点)。顺便说一句,我会称这些“类属性”,而不是“类属性”,因为属性是不同的(通常由
property内置函数/装饰器创建)。 -
@kojiro 他不是指那些属性,他只是指属性。
-
我避免在 init 中将其初始化为实例变量的主要原因是代码的简洁性。如果我不需要 init 用于任何其他目的,我宁愿避免编写一个,以及(IMO)丑陋的 super()__init__() 调用只是为了初始化一个变量。
-
IMO,上面显示的方式是完全干净的。静态变量绑定到一个类。继承时,新的静态变量将绑定到最子类。重新定义它可以清楚地表明您在 B 中也有一个静态 foo。除此之外,这对我来说似乎是一个设计问题,因为这种“模式”不仅非常罕见,而且也不是真正的继承模式。