从类中调用属性对象?

时间:2016-06-17 18:48:19

标签: python python-2.7 class properties

我正在尝试从其类中调用属性并获取值。我理解属性是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()

我在make_burger_dict方法中尝试了3: eval("self." + key),并创建了所需的结果。但是,我听说要避免使用eval,那么不使用它就可以了吗?

1 个答案:

答案 0 :(得分:3)

我认为这就是你想要的。你不应该处理__get__废话。这就是在课堂上创建描述符的重点; python自动处理它。

def make_burger_dict(self, key):
    val = getattr(self, key)
    return {1: val, 2: val}