@ staticmethod可以继承吗?

时间:2011-02-20 21:29:47

标签: python

关于这个问题的说法。我有一个抽象类,它在辅助函数中调用static方法,我希望子类只是定义staticmethod并运行它。

也许我可以使用getattr的一些东西?我应该使用@classmethod吗?

2 个答案:

答案 0 :(得分:4)

这样的事情:

class A(object):
    def func(self):
        self.f()

class B(A):
    @staticmethod
    def f():
        print "I'm B"

测试:

>>> a=x.A()
>>> a.func()
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "x.py", line 3, in func
    self.f()
AttributeError: 'A' object has no attribute 'f'
>>> b=x.B()
>>> b.func()
I'm B

A不能单独工作,并且有一个调用静态方法的辅助函数。 B定义静态方法。如果我理解你想要的东西,这是有效的......

答案 1 :(得分:2)

是的,如果您使用self来调用方法,或者在类方法中使用cls,它将会起作用。

尽管如此,我肯定会建议使用classmethod代替。这将允许实现查看类属性,如果你最终得到多级继承,它可以使中间类更容易做正确的事情。

我不知道你在你的方法中实际上在做什么,所以有可能classmethod在实践中不会给你买任何东西。它几乎没有任何用处,所以你可能习惯它。