@staticmethod可以被继承吗?
这个问题说得很清楚。我有一个抽象类,它在一个辅助函数里调用了一个静态方法,我希望子类只需要定义这个静态方法,然后就可以直接使用了。
我是不是可以用类似getattr的东西?或者我应该用@classmethod呢?
2 个回答
3
是的,如果你用 self
来调用方法,或者在类方法中用 cls
,这都是可以的。
不过,我还是建议你使用类方法。这样做可以让实现代码查看类的属性,如果你将来有多个继承层级,这样可以让中间的类更容易处理事情。
我不太清楚你在方法里具体在做什么,所以可能类方法在实际使用中对你没有什么帮助。不过,使用它几乎没有什么成本,所以你不妨养成这个习惯。
5
像这样:
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
定义了这个静态方法。如果我理解你的意思没错的话,这样是可以的……