2017-03-13 6 views
0

Ich versuche, eine Funktion zu erstellen, die ein Attribut aufruft, das durch das übergebene Argument bestimmt wird.Verweis auf das Attribut eines Objekts durch ein Argument

class room: 
    def __init__(self, length, bredth, depth): 
     self.length = length 
     self.bredth = bredth 
     self.depth = depth 

    def displaymeasurement(self, side): 
     print(self.side) 


kitchen = room(10, 20, 15) 

room.displaymeasurement("depth") 

Dies ist eine Abstraktion des Codes, den ich verwende, da das zu gewunden ist. Ich habe versucht, es dem fraglichen Code anzupassen, und es erzeugt die gleiche Fehlermeldung.

Traceback (most recent call last): 
    File "/home/townsend/Documents/PycharmProjects/untitled2/Test/inplicitreference.py", line 13, in <module> 
    room.displaymeasurement("depth") 
    File "/home/townsend/Documents/PycharmProjects/untitled2/Test/inplicitreference.py", line 8, in displaymeasurement 
    print(self.side) 
AttributeError: 'shape' object has no attribute 'side' 

Welche Syntax bin ich mit dem Computer kommunizieren fehlt von dort zu ersetzen side mit dem eingegebenen Argument depth und zu verarbeiten.

Ich habe ein paar Tage gesucht, aber ich kann nicht scheinen, einen Versuch auf einer ähnlichen Konstruktion zu finden. Vielleicht liegt es daran, dass ich falsche Terminologie verwende. Ich bin sehr neu dazu.

Ich erwarte nicht, dass diese Methode funktioniert, aber ich dachte, es wäre der beste Weg, dies zu veranschaulichen. Ich habe verschiedene Methoden ausprobiert.

Ich kenne eine Reihe von if Checks als eine Lösung, aber ich bin überzeugt, dass es eine einfachere und erweiterbarere Lösung gibt.

def displaymeasurement(self, side): 
    if side == "length": 
     print(self.length) 
    if side == "bredth": 
     print(self.bredth) 
    if side == "depth": 
     print(self.depth) 
+0

Sie 'getattr':' print (getattr (self, Seite)) ' – mgilson

Antwort

0

Klassenzimmer: def init (self, Länge, bredth, Tiefe): self.laenge = Länge self.bredth = gebredth self.depth = Tiefe

def displaymeasurement(self, side): 
    print(getattr(self, side)) 

Küche = Raum (10, 20, 15)

room.displaymeasurement ("Tiefer")

0

Dies ist eine fragile Möglichkeit, nach Mitgliedern in der Nachschlagetabelle eines Objekts zu suchen. getattr() ist nur für diesen Anwendungsfall gedacht. Beispiel unten:

class MyClass(object): 
    def __init__(self): 
     self.x = 'foo' 
     self.y = 'bar' 

myClass = MyClass() 

try: 
    print(getattr(myClass, 'x')) 
    print(getattr(myClass, 'y')) 
    print(getattr(myClass, 'z')) 

except AttributeError: 
    print 'Attribute not found.' 

Beispielausgabe:

foo 
bar 
Attribute not found. 
Verwandte Themen