program story

클래스 및 인스턴스 메서드의 차이점

inputbox 2020. 12. 12. 10:42
반응형

클래스 및 인스턴스 메서드의 차이점


나는 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클래스의 인스턴스 메소드를 호출 합니다. 이것은 우리가 똑같은 결과를 호출 하고 얻을 수 있음을 의미합니다 .introducemyinstotherinstInst.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

반응형