Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查实例是否重写了Python中的超类方法_Python_Python 3.x - Fatal编程技术网

检查实例是否重写了Python中的超类方法

检查实例是否重写了Python中的超类方法,python,python-3.x,Python,Python 3.x,我正在编写一个UI库,它是为键盘导航界面设计的。它有一个功能,当最终用户按下箭头键时,它可以自动“自动完成”链接,确定高亮显示从任何给定按钮移动到哪个按钮。显然,这个系统需要知道库用户是否已经指定了链接应该去哪里,或者当按下箭头键时是否指定了新的行为 我想我可以在{Up/Down/Left/Right}ArrowKeyPressed方法上按下,其默认值是将高亮显示切换到self.{Up/Down/Left/Right}链接,因此如果没有覆盖self.\uuuuuuuuuu链接==None和On\

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

我想我可以在{Up/Down/Left/Right}ArrowKeyPressed方法上按下
,其默认值是将高亮显示切换到
self.{Up/Down/Left/Right}链接
,因此如果没有覆盖
self.\uuuuuuuuuu链接==None
On\uuuuuuuuuuuuuuu箭头键
,库可以安全地假定它负责设置该按钮的链接


是否有可靠的方法检测对象是否使用其默认的超类方法?
thebutton.OnUpArrowKeyPressed是按钮。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

简单使用
按钮可能重复。OnUpArrowKeyPressed是按钮。OnUpArrowKeyPressed.\uuu func\uuuu
对于实例,这些是方法描述符,您可以使用
。\uu func\uuuu
,例如
>>a.ping.\uu func\uuu==b.ping.\uu func\uu真