Почему дочерние классы в python не используют одни и те же указатели на функцию родительского класса? - PullRequest
0 голосов
/ 24 января 2020

Я пытался проверить, имеет ли класс определенную функцию в качестве переменной, и тестировал ее, сравнивая ее с родительской функцией, с которой был инициализирован дочерний класс, но обнаружил, что они существуют по разным адресам памяти. Следующий код демонстрирует это поведение:

>>> 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>>

Почему это так? И можно ли как-то обойти это, чтобы я мог проверить, эквивалентны ли они?

Редактировать:

И почему вышеупомянутое может отличаться от приведенного ниже?

1009 *
...