Gibt es eine Möglichkeit, den Attribut-Namespace einer Klasseninstanz in eine Methode zu importieren?Instanz-Namespace in eine Methode importieren
Gibt es auch eine Möglichkeit, die Ausgabe direkt in den Attributnamensraum der Instanz zu leiten?
Betrachten wir zum Beispiel diese einfache Code-Block:
class Name():
def __init__(self,name='Joe'):
self.name = name
def mangle_name(self):
# Magical python command like 'import self' goes here (I guess)
self.name = name + '123' # As expected, error here as 'name' is not defined
a_name = Name()
a_name.mangle_name()
print(a_name.name)
Wie erwartet, wird dieser Block von Code schlägt fehl, da name
nicht erkannt. Was ich erreichen möchte ist, dass die Methode mangle_name
den Attributnamensraum von self
durchsucht, um nach name
zu suchen (und im Beispiel 'Joe'
findet). Gibt es einen Befehl, so dass das Attribut Namespace von self
importiert wird, so dass es kein Fehler sein, und der Ausgang wird sein:
>>> Joe123
Ich verstehe, dass dies wahrscheinlich eine schlechte Praxis ist, aber unter bestimmten Umständen würde es machen der Code viel klarer ohne viele Referenzen auf self.
etwas in ihm. Wenn dies stattdessen "so schrecklich und niemals getan werden" ist, können Sie bitte erklären, warum?
In Bezug auf den zweiten Teil der Frage, was ich tun möchte, ist:
class Name():
def __init__(self,name='Joe'):
self.name = name
def mangle_name(self):
# Magical python command like 'import self' goes here (I guess)
name = name + '123' # This line is different
a_name = Name()
a_name.mangle_name()
print(a_name.name)
Wo dieser Code die Ausgabe zurückgibt:
>>> Joe123
Der Versuch, den Befehl import self
gibt ein Modul nicht Fehler gefunden
Ich benutze Python 3.5 und würde daher eine Python 3.5-kompatible Antwort bevorzugen.
EDIT: Für Klarheit.
Ja, das ist mir klar. Meine Frage bezieht sich auf das Importieren des Namespace der Instanz, so dass die Zeile im Beispiel als gültiger Code betrachtet wird. – Charlie
Sie müssen nicht selbst importieren, der Code wird ordnungsgemäß ausgeführt, sobald Sie die Änderung vorgenommen haben. Ihre Klassenfunktion hat bereits Zugriff auf das Klassenattribut. –
Bei dieser Frage geht es nicht darum, wie das Beispiel so einfach wie möglich funktioniert - die Frage ist, wie der Attribut-Namespace einer Instanz importiert werden soll. Unter bestimmten Umständen würde es den Code viel klarer machen, ohne viele Hinweise auf sich selbst zu haben. – Charlie