Vererbung funktioniert in Python nicht so. Ich denke jedoch, Ihr Problem ist Mutabilität und nicht Vererbung selbst. (Sie haben die Vererbung nicht angewendet, ich habe diese angegeben, weil Sie sie als Tag und im Titel verwendet haben.)
Versuchen Sie es so.
class a():
def __init__(self):
self.x = [5]
class b():
def __init__(self, r):
self.y = r
def chg(self, a):
self.y = a
m = a()
n = b(m.x)
n.y[0] = 99
print m.x
# Gives 99
Auf diese Weise erstellen Sie nur eine Liste und verwenden sie mit zwei verschiedenen Klassen.
Hinweis: Sie können dies denken als Pass von Referenz Eigenschaft in C-Typ Sprachen.
Nur um zu bedenken, jede Zuordnung in Python ist übergeben durch Verweis, weil Python Variablen anders als diese Sprachen behandelt. Read more about it. (Dies hat keine Auswirkungen auf die Wandlungsfähigkeit.)
Bearbeiten: Ich sehe, dass Sie Ihre Frage bearbeitet. Lassen Sie mich nun erklären, warum Ihr Code nicht wie erwartet funktioniert.
Mutabilität bedeutet, dass Sie die Elemente in einem Container ändern können, ohne sie einer neuen Adresse im Speicher zuzuordnen.
Wenn Sie das tun,
n.y = ["c", "d"]
Sie ändern sich nicht auf der Liste, (so dass Sie nicht mutieren die Liste) Sie gerade eine neue Liste zu diesem Variablennamen zuweisen. Um die ursprüngliche Liste zu ändern, müssen Sie jedes Element ändern, indem Sie list[index]
verwenden, damit das Element geändert wird, aber die Liste wird dieselbe Liste sein. So können Sie diese tun
m = a()
n = b(m.x)
new_list = ["c", "d"]
for i, elem in enumerate(new_list):
# This way you change every element one-by-one.
n.y[i] = elem
print m.x
Wenn Sie nicht vertraut sind mit enumerate
, studieren Sie es sofort. Aber wenn Sie möchten, einfachen Code verwenden (und ähnlichen C-Implementierung.) Sie können die Zuordnungen wie diese machen,
for i in range(len(new_list)):
n.y[i] = new_list[i]
ganze Zahlen sind unveränderlich. Das können Sie nur, wenn Sie die ganze Zahl in ein unveränderliches Objekt oder eine unveränderliche Klasse umbrechen. –
@ Jean-FrançoisFabre Herr, eigentlich die Art der Eigenschaften sind Listen, keine ganzen Zahlen. Ich habe Integer in diesem Beispiel verwendet, um es einfach aussehen zu lassen. Soll ich Listen in meiner Frage verwenden? – alwbtc
@alwbtc zu sehen, wie sie zwei verschiedene Dinge sind, ja, ja du solltest. – MooingRawr