Метод Python работает, если мы заменяем себя случайным объектом, почему и как? - PullRequest
0 голосов
/ 25 сентября 2019

В приведенном ниже коде вы можете видеть мои вопросы в комментариях, когда я вызываю методы класса с первым аргументом со случайным объектом вместо теста экземпляра, он все еще работает!Почему не выкидывает ошибку и как она работает под капотом?

class Classtest():
    def instance_method(self):
        print(f'Called instance_method of {self}.')

   def d(self, a):
       print(2*a)


test = Classtest()

Classtest.instance_method(test) 
# output: Called instance_method of <__main__.Classtest object at 0x0085F070>.
Classtest.instance_method("kokokoko")
#output: Called instance_method of kokokoko.    #why??? and why not error???
Classtest.d(test,4) 
#output:8
Classtest.d("tralala",4)
#output:8 #why??? and why and how it works?

1 Ответ

0 голосов
/ 25 сентября 2019

Вы пошли на дополнительную работу, чтобы обойти обычную работу метода класса.Вместо того чтобы использовать синтаксис вызова, который вы нашли в своих учебных материалах

test.instancemethod()
test.d(4)

..., вы назвали каждый метод как class метод и переопределили объект symbiont для вызова.Так как ваши методы на самом деле не используют экземпляр класса, который их вызывает, вам «не по себе» это использование.

Например, когда вы вызываете d, вы жестко закодировали строку какself объект, но тогда вы не используете его незаконным способом.Метод с радостью выводит значение 2 * 4.

Я предлагаю вам пройти еще одно или два урока по классам и методам, чтобы понять, как они должны работать. Тогда вы находитесь в хорошем положении, чтобы изменить намерения таким образом.: -)

...