我想要一个__init__()只在基类中运行但不在子类中运行的方法。鉴于这里的代码:class base: def __init__(self): print('Only print this if I am base')class ext(base): ...foo = ext()我得到以下结果:Only print this if I am base我不是,所以这不是我想要的。解决方案可能只是一个更好的架构。显然ext不是真正的扩展,base因为base做不做的事情ext。也许双继承是解决方案。让基i_print_an_init_message类继承自类并将其__init__()放在那里。虽然这似乎有点矫枉过正。还要检查班级的名称以查看名称是否base看起来很笨拙。或者,也许我只是在 init 中有一个默认为False.有没有什么特别的pythonic方式来做到这一点?(请假设我已经回答了所有“你为什么要这样做?”的评论。谢谢!)
3 回答

皈依舞
TA贡献1851条经验 获得超3个赞
大概应当充当父两个三等功base和ext。
class RealBase:
def __init__(self):
...
class Base(RealBase):
def __init__(self):
print('Only print this if I am base')
class Ext(RealBase):
def __init__(self):
...
Ext不应该延长Base,如果它的实例没有真正的实例Base。您应该能够在任何可以使用其父类实例的地方使用子类的实例。

幕布斯6054654
TA贡献1876条经验 获得超7个赞
你可以__init__用类似的东西覆盖或破解它
class base:
def __init__(self):
if self.__class__ == base:
print('Only print this if I am base')
如果你想做base.__init__不ext.__init__应该做的事情。但这可能表明你应该改变你的设计......。
添加回答
举报
0/150
提交
取消