Инициализация множественного наследования в Python - PullRequest
0 голосов
/ 17 апреля 2020

Я наткнулся на следующий python код, в котором класс наследуется от двух родительских классов. Я пытаюсь понять конструктор класса.

# wrapper.py:
#############
class EWrapper:
    def __init__(self):
        pass

...

# client.py
###########
class EClient(object):
    def __init__(self, wrapper):
        self.msg_queue = queue.Queue()
        self.wrapper = wrapper
        self.decoder = None
        self.reset()
....

# Test.py
#########
class TestApp(EWrapper, EClient):
    def __init__(self):
        EClient.__init__(self, self)

Может ли кто-нибудь любезно пролить свет на EClient.__init__(self, self)? Мне не понятно использование двух self с. Как python узнает, какой self какой?

Каков процесс создания объекта TestApp?

Ответы [ 2 ]

2 голосов
/ 17 апреля 2020

В вызове EClient.__init__(self, self) первый self становится номером EClient в EClient 'def __init__(self, wrapper):. Далее, как вы можете видеть, второй self связывается с wrapper в этом вызове. TestApp наследует EWrapper, поэтому использует себя как wrapper для EClient.

1 голос
/ 17 апреля 2020

При инициализации TestApp вы используете self из EWrapper, а затем EClient, так как это порядок, определенный в классе.

...