본문 바로가기
파이썬

파이썬 클래스에 대한 __str__ 메서드를 정의하는 방법은 무엇입니까?

by º기록 2020. 9. 25.
반응형

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

 

 

반응형

댓글