检查实例是否在Python

时间:2017-07-04 20:43:53

标签: python python-3.x

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

我原以为我可以使用On{Up/Down/Left/Right}ArrowKeyPressed方法,其默认设置是将突出显示切换为self.{Up/Down/Left/Right}Link,因此如果self.___Link == NoneOn____ArrowKeyPressed未被覆盖,则库可以安全地假设它负责设置该按钮的链接。

是否有可靠的方法来检测对象是否正在使用其默认的超类方法? thebutton.OnUpArrowKeyPressed is Button.OnUpArrowKeyPressed会在所有情况下都有效吗?

1 个答案:

答案 0 :(得分:0)

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

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