Während "spielen" mit OOP-Paradigma in Python stieß ich auf einige Missverständnisse. Lassen Sie uns etwas kleines Beispiel sehen:Erstellen und Vergleichen von Klasseninstanzen ohne Variablenzuweisung in Python
class A(object):
pass
print id(A()), id(A()) # 139865221604432 139865221604432
print id(A()) == id(A()) # True
print A() is A() # False
a1 = A()
print id(a1) # 139865221604432
a2 = A()
print id(a2) # 139865220638096
Die Frage ist also, warum die ID-Nummer für den ersten Druck Beispiel die gleiche für beide Instanzen ist. Wenn wir einen Blick auf A() is A()
werfen, können wir sehen, dass alles "ok" ist und das Ergebnis falsch ist. Nicht sicher, aber kann es mit der Müllsammlung zu tun haben?
Ein weiteres Beispiel:
class B(object):
def __init__(self):
self.msg = 'Some default message'
print id(self)
def do_smth(self, msg):
self.msg = msg
def get_msg(self):
return self.msg
Dann haben wir zwei Fälle.
1. Platz:
B().do_smth(B().get_msg() + ' add')
2.
b = B()
b.do_smth(b.get_msg() + ' add')
Soweit ich der zweite Ansatz verstehen, viel mehr zu bevorzugen ist, weil wir zwei Instanzen erstellen, nicht wie in der ersten . Aber gibt es interessante Fälle, in denen wir den ersten Ansatz erreichen können?