2016-06-17 30 views
0

クラス内からプロパティを呼び出して値を取得しようとしています。私はプロパティがA.foo.__get__(a)であることを理解していますが、プロパティはクラスのインスタンス内にあるので、私はaが何であるかわかりません。現在、私の試みはオブジェクトと場所を返します。これは理にかなっていますが、代わりにそのプロパティの値を返すように私はどのように進めるでしょうか?クラス内からプロパティオブジェクトを呼び出していますか?

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() 

Iはmake_burger_dict方法で3: eval("self." + key)を試み、それが所望の結果を生成します。しかし、私はevalを避けるために聞いたことがあるので、それを使用せずにこれを行うには遠いですか?

+0

'getattr(Burgers、key)'は試しましたが、 'getattr(self、key)'は試していませんでしたか? –

答えて

3

私はこれがあなたの望むものだと思います。 __get__ナンセンスに対処する必要はありません。それはクラス上に記述子を作成する全体のポイントです。 pythonは自動的にそれを処理します。

def make_burger_dict(self, key): 
    val = getattr(self, key) 
    return {1: val, 2: val} 
関連する問題