如何覆盖staticmethod并保持静态?
In [6]: class Foo(object):
...: @staticmethod
...: def foo(a, b):
...: print a + b
...:
...:
In [7]: Foo.foo
Out[7]: <function foo at 0x86a1a74>
In [8]: class Bar(Foo):
...: def foo(a, b):
...: print a - b
...:
...:
In [9]: Bar.foo
Out[9]: <unbound method Bar.foo>
我尝试使用staticmethod装饰Bar's foo并且它有效。但是每次我进行子类化时都必须对它进行修饰。
答案 0 :(得分:5)
这就是你应该怎么做的。在其他编程语言中,您每次都必须使用static
关键字。
答案 1 :(得分:0)
无法强制子类将方法实现为一种特定的方法。不仅如此,当您以自己喜欢的任何方式在子类中实现继承方法时,您甚至可以更改继承方法的签名,它将起作用:
>>> class Foo:
... @staticmethod
... def foo(a, b):
... print(a + b)
...
>>> class Bar(Foo):
... @staticmethod
... def foo(*args):
... print(sum(args))
...
>>> Bar().foo(*range(10))
45