如何重寫類特殊方法?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__
依然採用內置Python定義__str__
。它僅在Foo().__str__()
而不是Foo.__str__()
時有效。
-1:「調用類的__str __()'方法而不創建實例」。打破每個人對任何事物的理解。請不要這樣做。它使程序絕對違反了我們最基本的期望。 – 2010-03-23 10:18:30
我不同意。如果你調用str(MyClass),那麼你沒有理由期望它像你剛剛調用str(myClassObject)那樣行事。也就是說,從一開始就沒有基本的期望。我懷疑他想創建一個靜態類,並且從不打算創建它的任何實例。 – 2010-07-29 23:33:50