当前位置: 首页 > 面试题库 >

在Python中,如何指示我要覆盖方法?

谭鹏云
2023-03-14
问题内容

例如,在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!!!!!!!


 类似资料:
  • 问题内容: 是否可以在Python中覆盖+ =? 问题答案: 是的,重写该方法。例:

  • 问题内容: 好的,我从很多地方和来源都听说过,每当我覆盖equals()方法时,我也需要覆盖hashCode()方法。但是请考虑以下代码 这里的输出为true,完全按照我想要的方式为false,我根本不关心重写hashCode()方法。这意味着hashCode()覆盖是一种选择,而不是每个人都说的强制性选择。 我想要第二次确认。 问题答案: 它对您有用,因为您的代码未使用任何需要API的功能(Ha

  • 问题内容: 我创建了一个自定义样式表,该样式表将覆盖Wordpress模板的原始CSS。但是,在我的日历页面上,原始CSS具有声明的每个表格单元格的高度: 有什么办法可以覆盖这个吗? 问题答案: 覆盖!important修饰符 只需使用添加另一个CSS规则,并赋予选择器更高的特异性(向选择器添加其他标签,id或类) 在比现有选择器晚的位置添加具有相同选择器的CSS规则(平局中,最后一个定义的获胜者

  • 我有一个实现可比较接口的类A,和一个扩展A的类B。我需要找到一种方法来覆盖类B中的。 我发现了一个类似的问题不能用可比的父子孙继承并试图实施提供的解决方案 A类: B类: 例外情况: 线程“main”java中出现异常。lang.ClassCastException:T4级。A不能转换为T4级。B(T4.A和T4.B在加载器“app”的未命名模块中)

  • 问题内容: 我试图覆盖Java中的方法。我有一堂课,基本上有2个数据字段和。现在,我想重写方法,以便可以在2个对象之间进行检查。 我的代码如下 但是当我写它给我错误时,因为方法只能比较并且是。 Solution 我按照建议使用运算符,问题解决了。 问题答案: Output: `run: – Subash Adhikari - VS - K false – Subash Adhikari - VS

  • 问题内容: 我想覆盖指令ng-click:在每次执行ng-click之前进行一些$ rootscope更改。怎么做? 问题答案: 您不能覆盖AngularJS内置指令。但是,您可以定义多个具有相同名称的指令,并使它们针对同一元素执行。通过为指令分配适当的值,您可以控制指令在内置指令之前还是之后运行。 该插件显示了如何构建在内置指令执行之前执行的指令。该代码也显示在下面。单击链接时,自定义将首先运行