Der Titel der Frage mag sehr seltsam sein, aber ich hatte keine Ahnung, wie ich es anders formulieren sollte. Ich suche nach Hilfe beim Verständnis von Klasseninstanziierung und Variablenreferenzierung in Python, insbesondere wenn eine Klassenvariable eine Instanz einer anderen Klasse ist. Ich werde das dlipower
Python-Modul verwenden, da das ist, woran ich gerade arbeite.Referenzieren der Instantiierung der Klasse in einer anderen Klasse
dlipower
besteht aus zwei Klassen, dlipower.PowerSwitch()
und dlipower.Outlet(switch)
. Outlet(switch)
erfordert eine Instanz von PowerSwitch()
als erstes Argument. Ich habe eine Klasse geschrieben, die diese beiden Klassen verwendet, aber ich habe keine Ahnung, wie ich auf die Instanz PowerSwitch
verweisen kann, ohne sie in jeder Funktion, die ich habe, zu instanziieren. Ich tue etwas ähnlich der folgenden jetzt:
import dlipower
class dli:
switch = dlipower.PowerSwitch() # should this be here?
def __init__(self):
pass
def PowerOn(self, port):
switch = dlipower.PowerSwitch() # this is what I want to remove
outlet = dlipower.Outlet(switch)
outlet.on(port)
Ich habe während Python-Code wurde Codierung, aber immer noch sehr neu in OOP, so dass alle Tipps und Hinweise wäre eine große Hilfe sein.
Haben Sie 'dli.switch' probiert? – TigerhawkT3
Ich bin mir nicht sicher, ob es eine einzige Antwort auf diese Frage gibt. Welche Semantik ist mit dem Schalter verbunden, den Sie an den Konstruktor "Outlet" übergeben? Wenn Sie es wiederverwenden, funktioniert es anders? Wenn es zwischen vielen 'dli' Instanzen geteilt wird, ist das wichtig? Es ist mir nicht klar, warum Sie überhaupt eine 'dli'-Klasse haben, da Sie sie niemals zum Speichern von Daten verwenden (als Attribute). – Blckknght
@Blckknght der einzige Grund, warum ich eine dli Klasse habe, ist die Instantiierung von 'switch' zwischen allen Methoden in' dli' zu teilen. Ich habe hier nur eine Funktion eingefügt, um meinen Punkt zu verdeutlichen, aber was ich tatsächlich in Instanzen von 'PowerSwitch()' erstellt habe, was ich vermute, verlangsamt das Skript. 'switch' ist in der gesamten Klasse gleich und es gibt keinen Unterschied in den verschiedenen Anwendungen. Für diese spezielle Klasse brauche ich außer "switch" keine Attribute. – atf