以 Java 为例,@Override
注释不仅提供了重写的编译时检查,而且还提供了优秀的自记录代码。
我只是在寻找文档(尽管如果它是像 pylint 这样的检查器的指示符,那就是一个奖励)。我可以在某处添加注释或文档字符串,但是在 Python 中指示覆盖的惯用方法是什么?
基于此和 fwc:s 答案,我创建了一个 pip 可安装包https://github.com/mkorpela/overrides
我有时会在这里查看这个问题。
主要是在我们的代码库中(再次)看到相同的错误之后发生这种情况:有人在重命名“接口”中的方法时忘记了一些“接口”实现类。
Python 不是 Java,但 Python 很强大——而且显式比隐式更好——并且在现实世界中有一些真实的具体案例,这个东西会对我有所帮助。
这是重写装饰器的草图。这将检查作为参数给出的类是否与被装饰的方法具有相同的方法(或其他名称)名称。
如果您能想到更好的解决方案,请在这里发布!
def overrides(interface_class):
def overrider(method):
assert(method.__name__ in dir(interface_class))
return method
return overrider
其工作原理如下:
class MySuperInterface(object):
def my_method(self):
print 'hello world!'
class ConcreteImplementer(MySuperInterface):
@overrides(MySuperInterface)
def my_method(self):
print 'hello kitty!'
如果您执行了错误的版本,它将在类加载期间引发断言错误:
class ConcreteFaultyImplementer(MySuperInterface):
@overrides(MySuperInterface)
def your_method(self):
print 'bye bye!'
>> AssertionError!!!!!!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)