python - 检查实例是否在 Python 中覆盖了父类(super class)方法

标签 python python-3.x

我正在编写一个专为键盘可导航界面设计的 UI 库。它有一个功能,当最终用户按下箭头键时,它可以自动“自动完成”确定突出显示从任何给定按钮移动到哪个按钮的链接。显然,该系统需要知道图书馆用户是否已经指定了链接的去向,或者是否指定了按下箭头键时要发生的新行为。

我在想我可以只使用 On{Up/Down/Left/Right}ArrowKeyPressed 方法,它的默认设置是将突出显示切换到 self.{Up/Down/Left/Right }Link,所以如果 self.___Link == NoneOn____ArrowKeyPressed 没有被覆盖,库可以安全地假设它负责设置该按钮的链接。

是否有一种可靠的方法来检测对象是否正在使用其默认的父类(super class)方法? thebutton.OnUpArrowKeyPressed is Button.OnUpArrowKeyPressed 是否适用于所有情况?

最佳答案

您可以通过比较函数来检查类是否覆盖了函数。

class A:
    def ping(self):
        print("pong")

class B(A):
    def ping(self):
        print("overridden")

class C(A):
    pass
    # Not Overridden

A.ping == B.ping  # False
A.ping == C.ping  # True

当我测试它时,它在比较对象中的方法时不起作用

a = A()
b = B()
c = C()

a.ping == b.ping  # False
a.ping == c.ping  # False

如果你需要比较你可以使用的对象中的方法

a.__class__.ping == c.__class__.ping  # True

关于python - 检查实例是否在 Python 中覆盖了父类(super class)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44913773/

相关文章:

python - 在可变长度元素之后的字符串中插入 "-"

python - Flask API - 验证哈希请求

python - 对 Pandas DataFrame 进行切片以显示特定日期的所有记录

Python - 嵌套类(父子类[类新手])

python - 如何在 while 循环中使用索引每次查找下一个出现的位置

Python - 重新格式化从 MySQL 返回的元组列表

python - SQLAlchemy 多对多性能

python - 在使用 scikit 学习进行特征选择后识别过滤后的特征

python - 在Python中从子类调用父类(super class)方法

python - 如何从列表列表中获取跨多个列表的项目子序列?