所有派生自某个基类的类都必须定义一个名为“path”的属性。 就鸭子类型而言,我可以依靠子类中的定义:
class Base:
pass # no "path" variable here
def Sub(Base):
def __init__(self):
self.path = "something/"
另一个可能的方法是使用基类构造函数:
class Base:
def __init__(self, path):
self.path = path
def Sub(Base):
def __init__(self):
super().__init__("something/")
我使用的是Python 3.1。
你更喜欢哪个版本,为什么?有更好的方法吗?
super()
并不脆弱,2.x语法存在脆弱性,在3.x中已经修复(正如OP使用的那样,由super()
调用),以及多重继承一般也存在脆弱性。在Python 3.x中,没有任何理由直接调用基类方法,super().__init__(...)
语法从未更差,通常更好。 - Thomas Wouterssuper
的情况来看,我猜 deamon 正在使用 py3k。 - SilentGhost