Python: экземпляр класса создан без аргумента - PullRequest
0 голосов
/ 12 февраля 2019

Когда я объявляю класс, скажем,

class MyClass: 
    def __init__(self, value):
        self.data = value 
    def show(self):
        print self.data`

, тогда создание экземпляра

A = MyClass(1)

ведет себя так, как я и ожидал (вывод A.show равен 1),Но когда я создаю экземпляр без аргумента

B = MyClass

, а затем устанавливаю значение вручную

B.data = 2 

, вызов B.show возвращает TypeError: unbound method show() must be called with MyClass instance as first argument (got nothing instead).

Canкто-нибудь объяснит мне почему?

1 Ответ

0 голосов
/ 12 февраля 2019

B - это другое имя для определения класса MyClass.

B.data = 2

создает атрибут с именем data в определении класса.

B.show - ссылкак функции, определенной в MyClass.Это функция экземпляра, и ожидается, что она будет вызвана для экземпляра MyClass (что и есть A, но не то, чем B).

Экземпляр неявно передается в качестве первого аргументак функции.Вы можете явно вызвать функцию с экземпляром:

B.show(A)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...