在 Python 中,如何指示我正在重写某个方法?

2023-12-01

以 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(使用前将#替换为@)

在 Python 中,如何指示我正在重写某个方法? 的相关文章

随机推荐

  • 模拟 Java 枚举以添加值来测试失败情况

    我有一个enum或多或少像这样切换 public static enum MyEnum A B public int foo MyEnum value switch value case A return calculateSomethin
  • C# - 不同类型对象的列表

    我想创建一个列表 其中包含游戏中生成的所有不同单位的所有对象 但它们并不都是同一类 如果有帮助的话 它们都是主单元类的子类 但基本上我有一个具有基本功能的主要单位类 然后有更多的剑士 长枪兵等 我希望能够将所有不同的类型放在一个列表中 以便
  • 在同一(匿名)表中使用表键

    我想在同一个表中的匿名表中使用密钥 如下所示 loadstring return a One b a two 从我的角度来看 这should返回下表 a One b One two 然而 它只是返回nil 这可以做到吗 如何做到 As th
  • iOS PhotoKit:获取除全景之外的所有智能相册

    我使用以下代码来获取所有智能相册 PHAssetCollection fetchAssetCollections with PHAssetCollectionType smartAlbum subtype PHAssetCollection
  • Windows 是否缓存 SSH 密钥?

    我最近发布了一个有关 Git Bash 的问题 引用了旧的 GitHub 帐户用户名 请参阅此处的帖子 原帖 现在我完全确信 Windows 正在以某种方式存储我的 ssh 信息并将其用于我的 Git bash 会话 当我尝试推送到远程仓库
  • 在同一终端中执行“stty raw”命令?

    我正在尝试将控制台置于 Java 中的 原始 模式 我知道这只适用于 UNIX 我正在使用命令stty raw 如果我直接在终端中输入命令 它就会执行它应该执行的操作 在Java中 我尝试这样设置模式 Runtime getRuntime
  • 如何使关键字在 Qt::4.6 (C++) 中立即无延迟地工作?

    操作系统 win xp sp3 Qt 4 6 我有一个游戏板类 其中有一些矩形 我为该矩形定义了 keyPressEvent 以便在屏幕上移动他 Key A 矩形 moveToLeft 和 Key D 矩形 moveToRight 问题是按
  • 向量化 numpy 数组扩展

    我正在尝试找到一种方法来向量化一个操作 其中我采用 1 个 numpy 数组并将每个元素扩展为 4 个新点 我目前正在使用 Python 循环进行此操作 首先让我解释一下算法 input array numpy array 1 2 3 4
  • “按键%+”是什么意思?

    这段代码是什么意思 keys 我在一些源代码中看到了它 但我不知道要阅读哪些 Perl 文档才能了解它的含义 每当你看到一个看起来很漂亮的变量时 就在其中查找它perldoc perlvar 在这种情况下 是存储与最后一个正则表达式的命名捕
  • Python-docx设置文本方向RTL

    我正在尝试创建一个具有 RTL 从右到左 文本方向的文档 def printExam get the exam questions rows db db exam questions exam request vars exam selec
  • 改变图像尺寸后,图像的透明部分变成黑色

    我正在尝试根据我的视图更改图像大小 因此我为此编写了这段代码 UIImage imageWithImage UIImage image scaledToSize CGSize newSize Create a bitmap context
  • 删除Matlab中的四个嵌套循环

    我在 Matlab 中有以下四个嵌套循环 timesteps 5 inputsize 10 additionalinputsize 3 outputsize 7 input randn timesteps inputsize additio
  • 如何以编程方式在 Qt 中获取网络管理器设备名称?

    有没有可能在Windows中使用Qt C 获取网络适配器设备名称 网络适配器描述 我使用 QNetworkInterface 但它仅返回适配器名称 我想知道哪个适配器是基于 USB 的以太网 QNetworkInterface interf
  • 自动展开 Eclipse 插件 jar

    我的 Eclipse 插件需要作为平面目录展开执行 它使用 JNI 并且 JNI 部分需要访问插件提供的一些文件 如果作为 jar 安装 是否可以将插件配置为自动展开 或者我唯一的选择是要求用户将其内容解压缩到 Eclipse dropin
  • 使用“keras.utils.Sequence”作为输入时,不支持“y”参数。错误

    import pandas as pd from sklearn preprocessing import MinMaxScaler import os from tensorflow keras preprocessing image i
  • java中字符串xml节点内的转义xml字符

    我有一个 XML 数据字符串 我需要转义节点内的值 而不是节点本身 Ex
  • JPA / Hibernate Cascade.Remove @ManyToOne 的用例

    具有以下内容 User class ManyToOne cascade CascadeType REMOVE JoinColumn name INSTITUTION ID public void setInstitution final I
  • servlet 不将会话属性转发给 jsp

    使用嵌入式 tomcat 此代码有效 Servlet String test test request setAttribute test test request getRequestDispatcher index jsp forwar
  • 我有 JSF 1 1 页面 其中有一个
  • 在 Python 中,如何指示我正在重写某个方法?

    以 Java 为例 Override注释不仅提供了重写的编译时检查 而且还提供了优秀的自记录代码 我只是在寻找文档 尽管如果它是像 pylint 这样的检查器的指示符 那就是一个奖励 我可以在某处添加注释或文档字符串 但是在 Python