IT story

Python에서 기본 클래스의 클래스 메서드 호출

hot-time 2020. 9. 1. 08:00
반응형

Python에서 기본 클래스의 클래스 메서드 호출


다음 코드를 고려하십시오.

class Base(object):

    @classmethod
    def do(cls, a):
        print cls, a

class Derived(Base):

    @classmethod
    def do(cls, a):
        print 'In derived!'
        # Base.do(cls, a) -- can't pass `cls`
        Base.do(a)

if __name__ == '__main__':
    d = Derived()
    d.do('hello')

> $ python play.py  
> In derived! 
> <class '__main__.Base'> msg

에서 Derived.do어떻게 전화 Base.do합니까?

super일반적인 개체 메서드 인 경우 일반적으로 또는 기본 클래스 이름을 직접 사용하지만 기본 클래스에서 classmethod를 호출하는 방법을 찾을 수 없습니다.

위의 예에서는 클래스 대신 클래스를 Base.do(a)인쇄합니다 .BaseDerived


새로운 스타일의 클래스를 사용하는 경우 (즉 object, Python 2 또는 항상 Python 3에서 파생 됨 ) 다음과 super()같이 할 수 있습니다 .

super(Derived, cls).do(a)

이것은 print cls, a파생 클래스 cls로 설정된 파생 클래스에서 기본 클래스 버전의 메서드 (예 :)에서 코드를 호출하는 방법 입니다.


오랜만에 답을 찾은 것 같습니다. 클래스 메서드가되도록 메서드를 장식하면 원래 바인딩되지 않은 메서드가 'im_func'라는 속성에 저장됩니다.

class Base(object):
    @classmethod
    def do(cls, a):
        print cls, a

class Derived(Base):

    @classmethod
    def do(cls, a):
        print 'In derived!'
        # Base.do(cls, a) -- can't pass `cls`
        Base.do.im_func(cls, a)

if __name__ == '__main__':
    d = Derived()
    d.do('hello')

이것은 나를 위해 작동합니다.

Base.do('hi')

참고 URL : https://stackoverflow.com/questions/1269217/calling-a-base-classs-classmethod-in-python

반응형