@ @ staticmethod可以被继承吗?

这个问题就是这样说的。 我有一个抽象类在辅助函数中调用静态方法,我希望子类只需定义静态方法并使用它运行。

也许我可以沿着getattr的方式使用某些东西? 我应该使用@classmethod吗?


像这样的东西:

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定义了静态方法。 这工作,如果我明白你想要什么正确的... ...


是的,如果你使用self来调用方法,或者使用cls方法,它会起作用。

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

我不知道你的方法实际上在做什么,所以在实践中,classmethod可能不会为你购买任何东西。 它几乎不需要使用,所以你也可以养成它的习惯。

链接地址: http://www.djcxy.com/p/9191.html

上一篇: Can @staticmethod's be inherited?

下一篇: Calling a class method in python