python: erstellen Sie eine Instanz der Klasse in einer anderen Klasse (generisches Beispiel)
Lerne ich python via Buch und internet-und ich bin stecken, auf eine Klasse Ausgabe.
2 Fragen:
- Wie erstelle ich eine Instanz von einer Klasse in eine andere (separate) Klasse?
- Wie gebe ich Variablen zwischen der Klasse und den verschachtelten(?) Klasse?
Wenn ich versuche zum erstellen einer Instanz einer Klasse in eine andere (separate) Klasse, ich bin in der Lage zu tun, innerhalb einer Methode. Hier ist der code:
import os
class FOO():
def __init__(self):
self.values = [2, 4, 6, 8]
def do_something(self, x, y):
os.system("clear")
z = self.values[x] * self.values[y]
print "%r * %r = %r" % (self.values[x], self.values[y], z)
class BAR():
def __init__(self):
pass
def something_else(self, a, b):
foo1 = FOO()
foo1.do_something(a, b)
bar = BAR()
bar.something_else(1, 2)
Wird dies jedoch, lassen Sie mich den Zugriff auf die Klasse " FOO " und die Informationen in anderen BAR-Methoden? Wenn ja, wie?
Ich habe Folgendes versucht und bekam eine Fehlermeldung:
import os
class FOO():
def __init__(self):
self.values = [2, 4, 6, 8]
def do_something(self, x, y):
os.system("clear")
z = self.values[x] * self.values[y]
print "%r * %r = %r" % (self.values[x], self.values[y], z)
class BAR():
def __init__(self):
foo1 = FOO()
def something_else(self, a, b):
foo1.do_something(a, b)
bar = BAR()
bar.something_else(1, 2)
Hier ist der Fehler:
Traceback (most recent call last):
File "cwic.py", line 22, in <module>
bar.something_else(1, 2)
File "cwic.py", line 19, in something_else
foo1.do_something(a, b)
NameError: global name 'foo1' is not defined
Bekomme ich die gleiche Fehlermeldung, wenn ich verwendet:
def __init__(self):
self.foo1 = FOO()
Auch, wie soll ich gehen die 'Werte' von einer Klasse in die andere?
Bitte lassen Sie mich wissen, wenn meine Allgemeine Annäherung und/oder syntax falsch sind. Alle Vorschläge willkommen (einschließlich gut Lesen), wie ich gerade Lerne. Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alle Attribute einer Instanz oder eine Klasse zugegriffen werden, die über
self
welches als erstes argument übergeben, um alle Methoden. Das ist, warum Sie haben richtig hab die Signatur der Methodesomething_else(self, a, b)
im Gegensatz zu nursomething_else(a, b)
wie Sie vielleicht mit anderen Sprachen. So sind Sie auf der Suche nach:Beachten Sie, dass selbst ist nicht ein Schlagwort, es ist nur ein paramater Namen wie
a
undb
, so könnte man beispielsweise versucht sein, zu verwendenthis
statt, wenn Sie aus einem Java-hintergrund nicht... aber! es ist eine sehr starke Konvention zu verwendenself
für diesen Zweck und Sie werden eine Menge Leute (einschließlich sich selbst schließlich) sehr wütend, wenn Sie nichts anderes nutzen!Wird mit Bezug auf die übergabe von Werten bin ich mir nicht sicher, was Sie bedeuten, können Sie durch Instanzen wie
foo1.an_attribute
oder übergeben Sie als Argumente an Funktionen wie infunction(arg)
aber Sie scheinen verwendet haben, beide Verfahren in Ihrem Beispiel, also bin ich nicht sicher, was Sie wollen...Bearbeiten
In der Antwort auf @dwstein Kommentar, ich bin mir nicht sicher, wie es gemacht wird, in VB, aber hier ist eine, wie Sie Argumente beim erzeugen einer Instanz einer Klasse.
Wenn wir uns anschauen, Klasse:
Wir können das ändern, um zu akzeptieren ein argument baz durch die änderung der zweiten Reihe zum
def __init__(self, baz):
und dann, wenn wir wollen, können wirbaz
ein Attribut unseres neuen Instanz vonBAR
durch Einstellungself.baz = baz
. Hoffe, das hilft.In python geben, die Sie immer verwenden müssen, die "selbst" - Präfix beim Zugriff auf Mitglieder der Klasse-Instanz. Versuchen
Du auf der richtigen Spur sind, versuchen Sie:
Ich bin mir nicht sicher, ob ich Ihre Frage verstehe, das ist mehr eine Reflexion von mir als von Euch. Wenn ich verstehe, was Sie suchen, möchten Sie erstellen eine Instanz einer Klasse innerhalb einer Methode der Klasse. Nun, ich könnte 'Weg off-base hier, so dass, wenn das ist verwirrend, kann es sein, dass ich die Beantwortung einer anderen Frage von Ihrer Frage.
Was dieses Programm tut, ist erstellen Sie eine Klasse
MyClass
, die über ein class-Objekt,instance_list
.instance_list
wird eine Liste der Instanzen. Methode der Klassemake_instances
macht genau das: es erzeugt Instanzen und fülltinstance_list
. Am Ende der Programm erstellen ichan_instance
die Art und Weise würde man "normalerweise" erstellen Sie eine Instanz. Soan_instance
ist ein Objekt der KlasseMyClass
.Ich hoffe, das ist hilfreich