반응형
Python에서 객체 클래스는 모든 (새 스타일) 클래스의 루트 수퍼 클래스 역할을합니다. 최소한 기본적으로 str 및 repr 을 object 하위 클래스의 "클래스 인스턴스"에 적용하면 동일한 결과가 생성됩니다.
>>> class spam(object): pass
...
>>> str(spam)
"<class '__main__.spam'>"
>>> str(spam) == repr(spam)
나는 str을 적용하는 것을 제외하고는 모든면에서 및 object 와 동일한 object 의 서브 클래스를 정의하고 싶습니다. repr to fancyobject 자체는 다른 출력을 생성합니다.
>>> class ham(fancyobject): pass
...
>>> str(ham)
'ham'
>>> repr(ham)
"<class '__main__.ham'>"
파이썬에서 이것을 수행하는 방법이 있습니까?
추신 : 저는 __ str __ 특수 메서드를 알고 있지만 A 클래스가 __ str __ 을 재정의하면 재정의 메서드가 A 자체에서 호출 될 때가 아니라 A 의 인스턴스에서 str 이 호출 될 때만 호출됩니다. 즉 :
>>> class A(object):
... def __str__(self):
... return 'from new __str__: ' + object.__str__(self)
...
>>> str(A())
'from new __str__: <__main__.A object at 0x7f79c62a5310>'
>>> str(A)
"<class '__main__.A'>"
해결 방법
실제로 객체 인스턴스와 동일한 메커니즘이 유형에 적용됩니다. 유형은 객체 자체 일 뿐이므로 "metaclass"라고하는 자신의 유형에서 __ str __ () 메서드를 호출하여 문자열로 변환됩니다. 따라서 메타 클래스의 __ str __ () 메서드를 덮어 써야합니다.
class fancytype(type):
def __str__(self):
return self.__name__
class ham(object):
__metaclass__ = fancytype
print ham
인쇄물
ham
참조 페이지 https://stackoverflow.com/questions/8144026
반응형
'파이썬' 카테고리의 다른 글
| 파이썬 Python Paramiko에서 명령을 실행 한 후 어떻게 결과를 저장할 수 있습니까? (0) | 2020.09.25 |
|---|---|
| 파이썬 Flask와 Tornado를 함께 사용하십니까? (0) | 2020.09.25 |
| 파이썬 Google App Engine에서 파일 업로드 (0) | 2020.09.25 |
| 파이썬 matplotlib에서 상관 관계 그래프 그리기 (0) | 2020.09.25 |
| 파이썬 Python에서 파일 gzip (0) | 2020.09.25 |
댓글