반응형
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)
인쇄합니다 .Base
Derived
새로운 스타일의 클래스를 사용하는 경우 (즉 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
반응형
'IT story' 카테고리의 다른 글
'입력'요소에 대한 '변경'이벤트와 '입력'이벤트의 차이점 (0) | 2020.09.01 |
---|---|
SQL Server에서 PAGEIOLATCH_SH 대기 유형이란 무엇입니까? (0) | 2020.09.01 |
RabbitMQ 메시지 크기 및 유형 (0) | 2020.09.01 |
GitHub와 함께 사용할 프로젝트 관리 (0) | 2020.09.01 |
코드에서 attrs.xml에 생성 된 enum을 얻는 방법 (0) | 2020.09.01 |