仅在基类中运行 __init__

我想要一个__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方式来做到这一点?


(请假设我已经回答了所有“你为什么要这样做?”的评论。谢谢!)


万千封印
浏览 142回答 3
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

你可以__init__用类似的东西覆盖或破解它class base:    def __init__(self):        if self.__class__ == base:            print('Only print this if I am base')如果你想做base.__init__不ext.__init__应该做的事情。但这可能表明你应该改变你的设计......。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python