Ich bin nicht Englisch als Muttersprache, und ich lerne Python bei https://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-referencesprivaten Variablen und Klasse-lokale Referenzen
Im Abschnitt 9.6 private Variablen und Klasse-lokale Referenzen, erklärte der letzte Absatz, dass:
Beachten Sie, dass Code, der an exec, eval() oder execfile() übergeben wird, nicht den Klassennamen der aufrufenden Klasse als aktuelle Klasse betrachtet; Dies ist ähnlich der Wirkung der globalen Anweisung, die Wirkung von , die ebenfalls auf Code beschränkt ist, die zusammen Byte-kompiliert wird. Die gleiche Einschränkung gilt für getattr(), setattr() und delattr(), wie und beim direkten Referenzieren von dict.
Es ist völlig nichts über diesen Text. Bitte erläutern oder geben Sie mir ein Beispiel, um die Idee zu demonstrieren.
Folgen Sie Ihrer Antwort, ich nehme an, dass der Namespace von exec() oder eval() private Attribute nicht enthalten? Und ich habe immer noch keine Ahnung von: "Das ist vergleichbar mit der Wirkung der globalen Anweisung, deren Wirkung ebenfalls auf Code beschränkt ist, der zusammen Byte-kompiliert wird. Die gleiche Einschränkung gilt für getattr(), setattr() und delattr(), genauso wie wenn man direkt referiert. " – user3044330
@ user3044330 Die Anweisung 'global' wirkt sich nur auf den Code im aktuellen Codeblock aus (_" Code, der zusammen bytekompiliert wird "_). Das gleiche gilt für die Namensänderung von privaten Attributen. Der Code in der 'exec' oder' eval' wird nicht zusammen mit dem Klassencode byte-kompiliert, so dass dort kein Namens-Mangling auftritt. –
Es ist meine exec() oder eval() sind "globale Anweisung" und konnte nicht in "Klassenblock" verwenden? Sie haben viel geholfen und ich werde nach exec(), eval() suchen, um das Wissen über sie zu vertiefen. Ich danke dir sehr. – user3044330