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

python에서 인스턴스 메서드, 클래스 메서드 및 스태틱 메서드에 대한 간단한 논의

Python 코드를 공부할 때, 일부 클래스 메서드의 첫 번째 매개변수가 cls인 것과 self인 것을 본 적이 있습니다. 알아보니, Python은 클래스 메서드의 첫 번째 매개변수 이름에 제한을 두지 않습니다. self 또는 cls로 사용할 수 있습니다. 그러나 일반적인 사용자의 습관에 따르면, self은 일반적으로 인스턴스 메서드에서 사용되고, cls는 일반적으로 클래스 메서드에서 사용되며, 스태틱 메서드에서는 기본 매개변수를 사용하지 않습니다. 아래의 코드에서 InstanceMethod 클래스의 메서드는 첫 번째 매개변수로 기본적인 self을 사용하고 있습니다. 여기서 self을 어떤 이름으로 바꿀지 상관없이, 어떤 영향도 없습니다. 클래스를 호출할 때는 매개변수의 개수 요구사항을 충족해야 합니다. 매개변수에 ', '이 포함되어 있습니다.*args는 예외입니다), 예를 들어}}13에서 클래스 호출이 파라미터가 없을 때는 오류가 발생합니다. 마찬가지로, 인스턴스 메서드의 파라미터 개수도 요구 사항을 충족해야 합니다. 예를 들어,16와 같이도 오류가 발생합니다. 인스턴스 메서드의 주요 특징 중 하나는 객체에 바인딩되어야 한다는 것입니다. 파이썬 파서는 자동으로 객체 자체를 메서드에 전달합니다. 예를 들어,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를 사용하며, 클래스 메서드는 인스턴스 없이 직접 클래스를 호출할 수 있습니다. 이 세 가지 다른 메서드의 사용 방법은 다음 예제에서 설명합니다. 그런 다음 문제가 생깁니다. 인스턴스 메서드가 있으면서도, 클래스 메서드와 정적 메서드와 비교해 뭐가 좋은 점이 있을까요?

클래스 메서드에서는, 인스턴스를 사용하거나 클래스를 호출하는 메서드를 사용할 때도, 클래스를 첫 번째 매개변수로 전달합니다. 이 매개변수는 클래스 자체입니다. 해당 메서드를 사용하는 클래스를 상속하면, 모든 자식 클래스가 이 메서드를 가지게 되며, 이 메서드는 자동으로 자식 클래스 자체를 가리키게 됩니다. 이 특성은 팩토리 함수에서 매우 유용합니다. 정적 메서드는 클래스와 인스턴스와 관계가 없으며, 일반 메서드로 대체할 수 있습니다. 하지만 정적 메서드를 사용하면 코드를 더 잘 조직하고, 코드가 커지면서 더 혼란스러워지는 것을 방지할 수 있습니다. 클래스 메서드는 정적 메서드를 대체할 수 있습니다. 정적 메서드는 상속에서 수정할 수 없습니다.

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#w로 이메일을 보내 주시기 바랍니다.3codebox.com(보고서를 작성할 때는 #을 @으로 변경하십시오. 신고하고 관련 증거를 제공하시면, 사실이 확인되면 해당 사이트가 즉시 저작권 침해 내용을 삭제합니다。)

좋아하는 것