为了账号安全,请及时绑定邮箱和手机立即绑定

仅在基类中运行 __init__

仅在基类中运行 __init__

万千封印 2021-09-02 15:59:28
我想要一个__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。您应该能够在任何可以使用其父类实例的地方使用子类的实例。


查看完整回答
反对 回复 2021-09-02
?
幕布斯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__应该做的事情。但这可能表明你应该改变你的设计......。


查看完整回答
反对 回复 2021-09-02
  • 3 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号