Подтвердить что ты не робот

Почему всегда добавлять self в качестве первого аргумента методам класса?

Возможный дубликат:
Зачем вам явно нужен аргумент "self" в методе Python?

Я понимаю, почему self всегда является первым аргументом для методов класса, это делает полный смысл, но если это всегда так, то зачем проходить через сложность набора, если для каждого определения метода? Почему бы не сделать что-то, что автоматически сделано за кулисами?

Является ли это для ясности или есть ситуация, когда вы не можете передавать себя в качестве первого аргумента?

4b9b3361

Ответ 1

Потому что явный лучше, чем неявный. Сделав параметр явным требованием, вы упрощаете понимание кода, интроспекцию и манипуляцию. Он далее расширился в Часто задаваемые вопросы по Python.

Кроме того, вы можете определить методы класса (возьмите класс вместо экземпляра в качестве первого аргумента), и вы можете определить статические методы (не принимайте "первый" аргумент вообще):

class Foo(object):
    def aninstancemethod(self):
        pass

    @classmethod
    def aclassmethod(cls):
        pass

    @staticmethod
    def astaticmethod():
        pass

Ответ 2

Гвидо объяснил, что здесь. В принципе, методы - это функции, а функции не должны принимать какие-либо "скрытые" параметры, иначе объекты более высокого порядка, такие как декораторы, не смогут справиться с ними разумным образом.