클래스 특수 메서드를 재정의하려면 어떻게해야합니까?Python이 클래스가 아닌 (인스턴스가 아닌) 특수 메서드를 재정의합니다.
인스턴스를 만들지 않고 클래스의 __str__()
메서드를 호출 할 수 있기를 원합니다. 예 :
class Foo:
def __str__(self):
return 'Bar'
class StaticFoo:
@staticmethod
def __str__():
return 'StaticBar'
class ClassFoo:
@classmethod
def __str__(cls):
return 'ClassBar'
if __name__ == '__main__':
print(Foo)
print(Foo())
print(StaticFoo)
print(StaticFoo())
print(ClassFoo)
print(ClassFoo())
는 생산 :
<class '__main__.Foo'>
Bar
<class '__main__.StaticFoo'>
StaticBar
<class '__main__.ClassFoo'>
ClassBar
은 다음과 같아야합니다
Bar
Bar
StaticBar
StaticBar
ClassBar
ClassBar
을 나는 @staticmethod
또는 @classmethod
이 __str__
여전히 사용하고 사용하는 경우에도 내장 된 파이썬 정의 __str__
. Foo.__str__()
대신 Foo().__str__()
일 때만 작동합니다.
-1 : "인스턴스를 만들지 않고 클래스의 __str __() 메소드를 호출하십시오." 누구든지 물건이 무엇인지에 대한 모든 이해를 끊어 버립니다. 제발 하지마. 프로그램이 우리의 가장 근본적인 기대에 절대적으로 위배됩니다. –
나는 동의하지 않는다. str (MyClass)을 호출하면 str (myClassObject)를 호출 한 것처럼 동작 할 것이라고 기대할 이유가 없습니다. 다시 말하면 근본적인 기대는 없습니다. 나는 그가 정적 클래스를 만들고자하고 결코 그것의 인스턴스를 만들 의도가 없다고 생각한다. –