Issue36163
Created on 2019-03-02 02:16 by lgj1993, last changed 2022-04-11 14:59 by admin. This issue is now closed.
| Messages (2) | |||
|---|---|---|---|
| msg336979 - (view) | Author: lgj (lgj1993) | Date: 2019-03-02 02:16 | |
>>> class A(): ... def a(self): ... pass ... >>> a = A() >>> a is a True >>> a.a is a.a False >>> id(a.a) 4532803784 >>> id(a.a) 4532803784 It's seems quite oops. |
|||
| msg336981 - (view) | Author: Steven D'Aprano (steven.daprano) * ![]() |
Date: 2019-03-02 02:36 | |
The ``is`` operator returns False because the two objects are different objects. Methods are descriptors, and whenever you access an instance method, you get a brand-new method object. This is described in the documentation for descriptors: https://docs.python.org/3/howto/descriptor.html#functions-and-methods The last two tests in your example both call id(a.a), which returns the same ID number for precisely the same reason as we explained in your previous bug report #36156. Since the two "a.a" method objects don't exist at the same time, the interpreter is permitted to re-use the same ID number for them. P.S. remember in the previous bug report you raised, I asked you to use less awkward and confusing names? "a.a" is a terrible name, even for a simple example like this. It makes it hard to talk about what is going on when "a" is an instance and also a method. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022-04-11 14:59:11 | admin | set | github: 80344 |
| 2019-03-02 02:36:48 | steven.daprano | set | status: open -> closed nosy:
+ steven.daprano resolution: not a bug |
| 2019-03-02 02:16:43 | lgj1993 | create | |
