Ich lerne Flasche, und jetzt lese ich den Flaschencode.
Ich komme in einen Block, den ich nicht vollständig verstehen kann.Wie behandelt Lambda in Python 3 die Argument-Referenz?
def implements_to_string(cls):
cls.__unicode__ = cls.__str__
cls.__str__ = lambda x: x.__unicode__().encode('utf-8')
return cls
@implements_to_string
class Test(object):
def __init__ (self):
pass
test = Test()
print(test.__str__)
print(test.__str__())
Der erste Druck zeigt die Lambda-Methode als:
<bound method Test.<lambda> of <__main__.Test object at 0x7f98d70d1210>>
Die zweite:
<__main__.Test object at 0x7fcc4394d210>
Wenn also funktioniert die x
in dem Lambda in func implements_to_string
das Objekt cls
werden?
Ist es nur ein innerer Mechanismus, an den ich mich jetzt nur erinnern muss?
Oder gibt es noch etwas anderes zu wissen?
Der Parameter 'x' beim Aufruf der Lambda-Funktion ist nicht die' Test'-Klasse, sondern die Instanz 'test'. Python ruft instancemethods mit der Instanz ('self') als erstes Argument auf. – resi
@resi Vielen Dank. Ich verstehe jetzt, dass die Lambda-Funktion in einer Klassenumgebung den ersten Parameter als "self" annehmen wird. – John