Почему НЕ используется self в методе класса, когда объект создается без скобок после имени класса? - PullRequest
0 голосов
/ 25 апреля 2020

В этом примере метод говорит внутри птицы класса не имеет параметра 'self'. При создании воробья объекта я не ставил круглые скобки после имени класса. Программа работает нормально. Но я предположил, что аргумент SELF является обязательным. Однако то же самое не работает, если я создаю такой объект -> sparrow bird (). Теперь, когда я использовал круглые скобки после имени класса, мне потребуется аргумент SELF внутри метода speak

class bird:
    color='Brown'
    def speak():            #NOT using SELF
        return 'Chirp Chirp'
sparrow = bird              #NO parenthesis being used after class name
print(sparrow.color)
print (sparrow.speak())

1 Ответ

0 голосов
/ 25 апреля 2020

Вам нужен параметр self в методе, когда метод вызывается для экземпляра класса.

Однако вы не вызываете метод для экземпляра, вы вызываете его для сам класс. Это:

sparrow = bird
print(sparrow.speak())

То же самое, что и просто:

print(bird.speak())

sparrow = bird по сути только что создал второе имя для класса bird. Это не создает экземпляр.

При вызове метода для класса никакие аргументы не передаются неявно, поэтому self не требуется.

...