【发布时间】:2016-06-19 13:54:17
【问题描述】:
假设我们有一个类A,一个继承自A 的类B,以及一个继承自B 的类C、D 和E。
我们希望所有这些类都有一个用默认值初始化的属性_f,并且我们希望该属性是可变的,并且对类的每个实例都有一个单独的值,即它不应该是静态的, 常量值A 被所有子类使用。
一种方法是在A的__init__方法中定义_f,然后在子类中依赖这个方法:
class A:
def __init__(self):
self._f = 'default_value'
class B(A):
def __init__(self):
super(B, self).__init__()
class C(B):
def __init__(self):
super(C, self).__init__()
有什么好的 Pythonic 方法可以避免这种情况,并且可能避免使用元类?
【问题讨论】:
-
请注意,如果所有子类实现都调用超类实现,则可以将它们排除在外。
class B(A): pass可以正常工作。您是在寻找 class 属性还是常规 instance 属性?你能举一个不那么抽象的例子吗? -
取决于字段
_f是指可变类型还是不可变类型。 -
_f应该是类字段还是实例字段? -
应该是实例字段,并且应该是可变的
-
@jonrsharpe 我对此感到非常惊讶,因为我已经阅读了这篇文章:link,并认为我什至不应该尝试它(未来的教训)。谢谢。
标签: python inheritance