Python documentation about the is
operator mówi:Dlaczego metoda nie jest identyczna z samą sobą?
operatorów
is
iis not
badanie tożsamości obiektu:x is y
jest prawdziwe wtedy i tylko wtedy, gdyx
iy
są tego samego obiektu.x is not y
daje wartość odwrotną .
Spróbujmy że:
>>> def m():
... pass
...
>>> m is m
True
Python documentation also says:
związku z automatycznym śmieci zbierania, bezpłatnych wykazów oraz dynamiczny charakter deskryptorów, można zauważyć, pozornie nietypowe zachowanie w niektórych zastosowaniach operatora operatora
is
, na przykład z udziałem wyładowania między metodami instancji, lub stałe. Sprawdź ich dokumentację , aby uzyskać więcej informacji.
>>> class C:
... def m():
... pass
...
>>> C.m is C.m
False
Szukałam więcej wyjaśnień, ale nie był w stanie znaleźć żadnego.
Dlaczego jest C.m is C.m
fałsz?
Używam Python 2.x. Jak zauważono w poniższych odpowiedziach, w Pythonie 3.x C.m is C.m
jest prawdziwe.
Aby uzyskać kompletność, [Deskryptory] (http://docs.python.org/reference/datamodel.html#invoking- descriptors) wykonują to dynamiczne wyszukiwanie atrybutów. To właśnie utrudnia dostęp do atrybutów również nadklasom. –
Tak, chociaż możesz również napisać przykład używając '__getattr__'. – katrielalex