English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Краткое обсуждение экземплярных методов, методов класса и статических методов в Python

При изучении кода на 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 (во время отправки письма, пожалуйста, замените # на @) для сообщения о нарушении,并提供相关证据. При обнаружении факта нарушения, сайт незамедлительно удалит涉嫌侵权的内容。

Рекомендуется