반응형
django.utils.tree.py에서 :
def _new_instance(cls, children=None, connector=None, negated=False):
obj = Node(children, connector, negated)
obj.__class__ = cls
return obj
_new_instance = classmethod(_new_instance)
이 코드 샘플에서 classmethod
가 무엇을하는지 모르겠습니다. 누군가 그것이 무엇을하고 어떻게 사용하는지 설명 할 수 있습니까?
해결 방법
classmethod
는 함수를 래핑하는 데코레이터이며 결과 객체를 클래스 또는 (동등하게) 인스턴스에서 호출 할 수 있습니다.
>>> class x(object):
... def c1(*args): print 'c1', args
... c1 = classmethod(c1)
... @classmethod
... def c2(*args): print 'c2', args
...
>>> inst = x()
>>> x.c1()
c1 (<class '__main__.x'>,)
>>> x.c2()
c2 (<class '__main__.x'>,)
>>> inst.c1()
c1 (<class '__main__.x'>,)
>>> inst.c2()
c2 (<class '__main__.x'>,)
보시다시피 직접 정의하든 데코레이터 구문으로 정의하든 클래스 또는 인스턴스에서 호출하든 classmethod
는 항상 클래스를 첫 번째 인수로받습니다.
classmethod의 주요 용도 중 하나는 대체 생성자 를 정의하는 것입니다.
>>> class y(object):
... def __init__(self, astring):
... self.s = astring
... @classmethod
... def fromlist(cls, alist):
... x = cls('')
... x.s = ','.join(str(s) for s in alist)
... return x
... def __repr__(self):
... return 'y(%r)' % self.s
...
>>> y1 = y('xx')
>>> y1
y('xx')
>>> y2 = y.fromlist(range(3))
>>> y2
y('0,1,2')
이제 y
를 하위 클래스로 지정하면 classmethod가 계속 작동합니다. 예 :
>>> class k(y):
... def __repr__(self):
... return 'k(%r)' % self.s.upper()
...
>>> k1 = k.fromlist(['za','bu'])
>>> k1
k('ZA,BU')
참조 페이지 https://stackoverflow.com/questions/1950414
반응형
'파이썬' 카테고리의 다른 글
파이썬 Pandas DataFrame 열 헤더에서 목록 가져 오기 (0) | 2021.01.04 |
---|---|
파이썬 pyyaml : 태그없이 덤핑 (0) | 2021.01.04 |
파이썬 boto를 사용하여 AWS 인스턴스에서 태그 얻기 (0) | 2021.01.03 |
파이썬 SMTP를 사용하여 첨부 파일을 보내려면 어떻게합니까? (0) | 2021.01.03 |
파이썬 Converting NumPy array into Python List structure? (0) | 2021.01.03 |
댓글