为什么python中的子类不共享指向父类函数的相同指针?

为什么python中的子类不共享指向父类函数的相同指针?,python,inheritance,parent-child,Python,Inheritance,Parent Child,我试图测试一个类是否有一个特定的函数作为变量,测试的方法是将它与子类初始化时使用的父函数进行比较,但发现它们存在于不同的内存地址。以下代码显示了此行为: >>> class common(): def a(): print('hello') >>> class one(common): def __init__(self): self.fn = super().a >&g

我试图测试一个类是否有一个特定的函数作为变量,测试的方法是将它与子类初始化时使用的父函数进行比较,但发现它们存在于不同的内存地址。以下代码显示了此行为:

>>> class common():
        def a():
            print('hello')

>>> class one(common):
        def __init__(self):
            self.fn = super().a

>>> var1 = one()
>>> var2 = one()
>>> var1.fn == var2.fn
False
>>> var1.fn is var2.fn
False
>>> var1.fn
<bound method common.a of <__main__.one object at 0x0737CC50>>
>>> var2.fn
<bound method common.a of <__main__.one object at 0x0737CAF0>>
>class common():
定义a():
打印('你好')
>>>第一类(普通):
定义初始化(自):
self.fn=super().a
>>>var1=one()
>>>var2=one()
>>>var1.fn==var2.fn
假的
>>>var1.fn是var2.fn
假的
>>>var1.fn
>>>var2.fn
为什么会这样?有没有办法让我检查它们是否相等

编辑:

为什么上面和下面有什么不同

>>> def h(x):
    return x+2

>>> var1 = h
>>> var2 = h
>>> var1 == var2
True
>>> var1 is var2
True
>>> var1
<function h at 0x073824F8>
>>> var2
<function h at 0x073824F8>
>>def h(x):
返回x+2
>>>var1=h
>>>var2=h
>>>var1==var2
真的
>>>var1是var2
真的
>>>var1
>>>var2

这些是不同对象的方法。即使没有其他复杂情况(如描述符协议),为什么您希望它们是相同的?@user2357112supportsMonica因为它们都引用相同的父类,即使不是,为什么它们指向不同的函数?这是一个合理的假设,因为在类之外,当您在python中创建函数时,它会在一个内存位置创建一次,无论您引用它多少次,它都只会在一个内存位置,您不会访问该函数。您正在访问实例方法
super()。无论什么
在这里并不意味着超类名。无论什么。