2016-06-17 6 views
0

Ich versuche, eine Eigenschaft aus seiner Klasse aufzurufen und den Wert zu erhalten. Ich verstehe, dass Eigenschaften sind A.foo.__get__(a), aber da die Eigenschaften innerhalb der Instanz der Klasse sind, bin ich mir nicht sicher, was meine a wäre. Momentan geben meine Versuche das Objekt und den Standort zurück. Das macht Sinn, aber wie würde ich vorgehen, damit es stattdessen den Wert der Eigenschaft zurückgibt?Aufruf des Property-Objekts aus der Klasse?

class Burgers(object): 

    def __init__(self): 
     self.burger1 = self.make_burger_dict('mc') 
     self.burger2 = self.make_burger_dict('bk') 
     print self.burger1 
     # prints {1: <property object at 0x10d51b7e0>, 2: <property object at 0x10d51b7e0>} 
     # what I want {1: 'Big Mac', 2: 'Big Mac'} 


    @property 
    def bk(self): 
     return "Whopper" 

    @property 
    def mc(self): 
     return "Big Mac" 

    def make_burger_dict(self, key): 
     return { 
      1: vars(Burgers)[key], 
      2: getattr(Burgers, key), 
     } 

x = Burgers() 

ich versuchte 3: eval("self." + key) im make_burger_dict Verfahren, und das schafft das gewünschte Ergebnis. Allerdings habe ich gehört zu vermeiden, eval, also ist es weg, dies zu tun, ohne es zu benutzen?

+0

Sie versuchten 'getattr (Burger, Schlüssel)' aber nicht 'getattr (Selbst, Schlüssel)'? –

Antwort

3

Ich denke, das ist was du willst. Sie sollten sich nicht mit dem Unsinn befassen müssen. Das ist der Sinn des Erstellens eines Deskriptors für eine Klasse. Python handhabt es automatisch.