подавить вызов __init __ () родительского класса - PullRequest
0 голосов
/ 08 января 2019

Я только что заметил непреднамеренное поведение, а затем протестировал его в интерпретаторе (Python 3.5.3):

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

Я думал, что вам нужно напрямую позвонить родителям __init__(). Как проще всего написать или создать экземпляр дочернего класса, чтобы он не запускал __init__() из родительского класса?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Мне нужны некоторые методы от родителя, но не то, чтобы init запускал

Тогда ваш дизайн не так. Если вы заботитесь только о повторном использовании кода, но не о правильном подтипировании (, как определено Лисковым ), правильные проекты - это либо композиция / делегирование, либо (вероятно, лучшее в вашем случае) множественное наследование с классами 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
0 голосов
/ 08 января 2019

Вы можете определить метод __init__ в дочернем классе:

class SomeOtherClass(SomeClass):
  def __init__(self):
    pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...