Python - 覆盖静态方法

时间:2012-01-15 12:12:22

标签: python

如何覆盖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并且它有效。但是每次我进行子类化时都必须对它进行修饰。

2 个答案:

答案 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