클래스 및 인스턴스 메서드의 차이점
나는 PEP 0008 ( Style Guide ) 을 읽고 있었는데 , self를 인스턴스 메서드의 첫 번째 인수로 사용하고 cls를 클래스 메서드의 첫 번째 인수로 사용하도록 제안했음을 알았습니다.
몇 가지 클래스를 사용하고 작성했지만 클래스 메서드 (cls를 매개 변수로 전달하는 메서드)를 본 적이 없습니다. 아무도 나에게 몇 가지 예를 보여줄 수 있습니까?
감사!
인스턴스 방법
인스턴스 메서드를 생성 할 때 첫 번째 매개 변수는 항상 self
입니다. 원하는대로 이름을 지정할 수 있지만 의미는 항상 동일 self
하며 이름 지정 규칙이므로 사용해야합니다 . self
인스턴스 메서드를 호출 할 때 (보통) 숨김으로 전달됩니다. 메서드를 호출하는 인스턴스를 나타냅니다.
다음 Inst
은라는 인스턴스 메서드가있는 라는 클래스의 예입니다 introduce()
.
class Inst:
def __init__(self, name):
self.name = name
def introduce(self):
print("Hello, I am %s, and my name is " %(self, self.name))
이제이 메서드를 호출하려면 먼저 클래스의 인스턴스를 만들어야합니다. 인스턴스가 있으면이를 호출 할 수 introduce()
있으며 인스턴스는 다음과 같이 자동으로 전달됩니다 self
.
myinst = Inst("Test Instance")
otherinst = Inst("An other instance")
myinst.introduce()
# outputs: Hello, I am <Inst object at x>, and my name is Test Instance
otherinst.introduce()
# outputs: Hello, I am <Inst object at y>, and my name is An other instance
보시다시피 매개 변수를 전달하지 않고 self
마침표 연산자를 사용하여 숨겨져 전달됩니다. 또는 매개 변수를 사용하여 Inst
클래스의 인스턴스 메소드를 호출 합니다. 이것은 우리가 똑같은 결과를 호출 하고 얻을 수 있음을 의미합니다 .introduce
myinst
otherinst
Inst.introduce(myinst)
수업 방법
클래스 메서드의 개념은 인스턴스 메서드와 매우 유사하지만 인스턴스를 숨겨진 첫 번째 매개 변수로 전달하는 대신 클래스 자체를 첫 번째 매개 변수로 전달한다는 점만 다릅니다.
class Cls:
@classmethod
def introduce(cls):
print("Hello, I am %s!" %cls)
메서드에 클래스 만 전달하므로 인스턴스가 관련되지 않습니다. 즉, 인스턴스가 전혀 필요하지 않으며 마치 정적 함수 인 것처럼 클래스 메서드를 호출합니다.
Cls.introduce() # same as Cls.introduce(Cls)
# outputs: Hello, I am <class 'Cls'>
다시 Cls
은닉 상태로 전달되므로 Cls.introduce(Inst)
output 이라고 말하고 얻을 수도 있습니다 "Hello, I am <class 'Inst'>
. 이는 다음에서 클래스를 상속 할 때 특히 유용합니다 Cls
.
class SubCls(Cls):
pass
SubCls.introduce()
# outputs: Hello, I am <class 'SubCls'>
참고 URL : https://stackoverflow.com/questions/17134653/difference-between-class-and-instance-methods
'program story' 카테고리의 다른 글
템플릿 매개 변수에 의존하는 인수가 없습니다. (0) | 2020.12.12 |
---|---|
app.config에서 ClientSettingsProvider.ServiceUri의 용도 (0) | 2020.12.12 |
사용중인 Play 버전을 확인하는 방법은 무엇입니까? (0) | 2020.12.12 |
뷰 사이의 가변 간격으로 UIStackView를 어떻게 만들 수 있습니까? (0) | 2020.12.12 |
모든 Java 바이트가 서명된다는 사실을 해결하는 가장 좋은 방법은 무엇입니까? (0) | 2020.12.12 |