代码之家  ›  专栏  ›  技术社区  ›  cardamom

禁止调用父类的init

  •  -2
  • cardamom  · 技术社区  · 5 年前

    我只是注意到一些意外行为,然后在解释程序(Python3.5.3)中对其进行了测试:

    >>> class SomeClass:
    ...     def __init__(self):
    ...         print("nothing important")
    ... 
    >>> a = SomeClass()
    nothing important
    >>> class SomeOtherClass(SomeClass):
    ...     pass
    ... 
    >>> b = SomeOtherClass()
    nothing important
    >>> 
    

    我以为你需要直接打电话给父母 __init__() . 编写或实例化子类以使其不运行 小精灵 来自家长班?

    2 回复  |  直到 5 年前
        1
  •  4
  •   DjaouadNM    5 年前

    你可以通过定义一个 __init__ 子类中的方法:

    class SomeOtherClass(SomeClass):
      def __init__(self):
        pass
    
        2
  •  1
  •   bruno desthuilliers    5 年前

    我想要一些来自父级的方法,只是不希望init运行

    那你的设计就错了。如果您只关心代码重用而不关心正确的子类型( as defined by Liskov ,正确的设计要么是组合/委托,要么是(可能是最好的)使用mixin类的多重继承:

    class CommonMixin():
        def method1(self):
           pass
    
        def method2(self):
           pass
    
    
    class SomeClass(CommonMixin, SomeBaseClass):
        def __init__(self):
            print("nothing important")
    
    
    class SomeOtherClass(CommonMixin, SomeOtherBaseClass):
        pass