2016-04-28 13 views
-1

Kann ich Variablen in einem Unterklassenobjekt je nach Benutzerbedarf ändern? Wenn ja, wie oder gibt es einen anderen Ansatz?Ändern Sie die Anzahl der selbs.Variablen in der Unterklasse basierend auf der Anforderung des Benutzers

Ich möchte eine Unterklasse Liste von Variablen in Größe basierend auf den Anforderungen eines Benutzers zu wachsen, ohne die * self. * Variablen im init vorschreiben zu müssen, und dem Benutzer erlauben, eine Liste zu erstellen.

Wie behandeln Sie eine Liste mit sich ändernder Länge in der Unterklasse?

class MyClass(object): 
    def __init__(self, list1, list2): # list 1: keys; list 2: values 

     len1 = len(list1) # Changing range based on desired keys 
     for i in range(len1): 

      self.list1[i] = list2[i] # desired effect 

List1 = ['first','second','third']; List2 = [1,2,3]; 
print(MyClass(List1,List2)) 
List1.append('fourth'); List2.append(4) 
print(MyClass(List1,List2)) 

gewünschte Ausgabe ist [[getattr(item, x) for x in list1] for item in list2] kehrt 3 Werte für die erste Instanz und 4 Werte für die zweite Instanz.

Der Fehler, den ich erhalten, wenn getattr(item, x) auf eine Instanz dieser Klasse versucht, ist AttributeError: 'MyClass' object has no attribute <key>, wo <key> list1 ist, eher als der Wert in list1.

Die Work-around ist, ich habe, um die Felder vorab zu füllen, etwa so:

import re 

kLs = ("the", "list", "of", "new", "caught", "values") 

let = ['a','b','c','d','e','f'] 
reAN = re.compile("\w+") 
for k in kLs: print('self.'+reAN.search(re.sub(r"\s+", "", k)).group()+' = '+let[kLs.index(k)]) 

ich dies jedes Mal, wenn ich will tun müssen, subtrahieren oder eine Variable hinzuzufügen. Dies wird nicht funktionieren. Jemand?

+0

ich eine Reihe von Änderungen vorgenommen haben, haben aber keine Antwort seit Donnerstag erhalten. Gibt es einen Grund warum? Kannst du wenigstens deinen Griff entfernen und anderen Leuten erlauben zu reagieren? Es wurde nicht erwähnt, warum dies keine angemessene Frage ist. – double0darbo

Antwort

2

Same as always:

MyClass(*space) 
+0

Ich habe nicht im ursprünglichen Post angegeben, aber es ist die Änderung in der Unterklasse, die ich ändern möchte, ebenso wie die Variablen in. Nicht sicher, ob das aber möglich ist. – double0darbo

Verwandte Themen