English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
При изучении кода на Python, я заметил, что в методах некоторых классов первым аргументом является cls, а в других — self. После изучения я понял, что Python не ограничивает имя первого параметра метода класса, это может быть self или cls. Однако, согласно привычкам пользователей, self обычно используется в методах экземпляра, а cls — в методах класса, а в статических методах не нужно использовать параметр по умолчанию. В следующем коде, методам класса InstanceMethod, первым аргументом по умолчанию является self, и вы можете заменить self на любое имя, не产生影响. При вызове класса, необходимо соответствовать требованиям количества параметров (исключение составляет *args), например, в строке 13, при вызове класса без параметров, будет выведено сообщение об ошибке. Точно так же, количество параметров метода экземпляра также должно соответствовать требованиям, например, в строке 16 также будет выведено сообщение об ошибке. Основной особенностью метода экземпляра является необходимость привязки к объекту, интерпретатор Python автоматически передает экземпляр методу, как показано на строке 14, и的直接 вызов метода InstanceMethod.f1() не возможен.
class InstanceMethod(object): def __init__(self, a): self.a = a def f1(self): print 'This is {0}.'.format(self) def f2(self, a): print 'Value:{0}'.format(a) if __name__ == '__main__': # im = InstanceMethod() im = InstanceMethod('233') im.f1() # im.f2() im.f2(233)
Статические и классовые методы都需要 использовать декораторы, которые соответственно используются как @staticmethod и @classmethod.Статические методы не связаны с классом, я думаю, это просто обычные методы, 包装在类中, как в следующем примере, вызов статического метода возможен как с использованием экземпляра, так и без него. В методах класса по умолчанию используется первый параметр cls, классовые методы также могут вызываться напрямую без использования экземпляра. Для этих трех различных методов способ использования показан в следующем примере. Так что вопрос arises, если уже есть методы экземпляра, то что такое классовые и статические методы по сравнению с ними?
В методах класса, независимо от того, используется ли экземпляр или вызывается метод класса, класс передается в качестве первого параметра. Этот параметр сам является классом. Если класс наследует метод класса, все подклассы получают этот метод, и он автоматически направляется на сам подкласс, что очень полезно в функциях фабрики. Статические методы не связаны с классом и экземпляром и могут быть заменены обычными методами, но использование статических методов помогает лучше организовать код и предотвратить его хаос при увеличении объема. Классовые методы могут заменить статические методы. Статические методы не могут быть изменены в наследовании.
class test(object): def instance_method(self): print 'This is {0}'.format(self) @staticmethod def static_method(): print 'This is static method.' @classmethod def class_method(cls): print 'This is {0}'.format(cls) if __name__ == '__main__': a = test() a.instance_method() a.static_method() a.class_method() print '----------------------------------------' # test.instance_method() test.static_method() test.class_method()
Вот и все, что есть в этой статье, я надеюсь, что содержимое статьи поможет вам в изучении или работе, и я также надеюсь, что вы поддержите учебник "Кричать"!
Заявление: содержимое этой статьи взято из Интернета, авторские права принадлежат соответствующему автору, контент предоставлен пользователями Интернета в порядке добровольного участия и самостоятельной загрузки, сайт не обладает правами собственности, не был обработан редакторами вручную и не несет ответственности за соответствующие юридические вопросы. Если вы обнаружите содержимое,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма, пожалуйста, замените # на @) для сообщения о нарушении,并提供相关证据. При обнаружении факта нарушения, сайт незамедлительно удалит涉嫌侵权的内容。