关于这个问题的说法。我有一个抽象类,它在辅助函数中调用static方法,我希望子类只是定义staticmethod并运行它。
也许我可以使用getattr的一些东西?我应该使用@classmethod吗?
答案 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在实践中不会给你买任何东西。它几乎没有任何用处,所以你可能习惯它。