And*_*dré 12 python overriding class
如何覆盖类特殊方法?
我希望能够__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())
Run Code Online (Sandbox Code Playgroud)
生产:
<class '__main__.Foo'>
Bar
<class '__main__.StaticFoo'>
StaticBar
<class '__main__.ClassFoo'>
ClassBar
Run Code Online (Sandbox Code Playgroud)
应该:
Bar
Bar
StaticBar
StaticBar
ClassBar
ClassBar
Run Code Online (Sandbox Code Playgroud)
即使我使用@staticmethod或@classmethod将__str__依然采用内置Python定义__str__.它只在它Foo().__str__()代替时才起作用Foo.__str__().
Anu*_*yal 20
__str__在类中定义的特殊方法仅适用于该类的实例,为了在类的元类中必须执行类对象的不同行为,例如(python 2.5)
class Meta(type):
def __str__(self):
return "Klass"
class A(object):
__metaclass__ = Meta
def __str__(self):
return "instance"
print A
print A()
Run Code Online (Sandbox Code Playgroud)
输出:
Klass
instance
Run Code Online (Sandbox Code Playgroud)