【发布时间】:2015-04-01 14:24:14
【问题描述】:
我是 Python 新手,所以如果我对一些简单的操作感到困惑,请原谅。
我有一个这样的对象:
class myObject(object):
def __init__(self):
self.attr1 = None
self.attr2 = None
@property
def prop1(self):
return foo.some_func(self.attr1)
我这样实例化它:
a = myObject()
a.attr1 = 'Apple'
a.attr2 = 'Banana'
并且它所包含的方法期望返回dict,所以我这样做:
return a.__dict__
但prop1 不包含在退货中。我明白这是为什么,它不在对象的__dict__ 中,因为它只包含真实属性。
所以问题是,我怎样才能让我的回报,回报是这样的:
{'attr1': 'Apple', 'attr2': 'Banana', 'prop1': 'ModifiedApple'}
除了在返回之前做的:
a.prop1_1 = a.prop1
【问题讨论】:
-
为什么不在您的类中添加一个新方法,该方法返回带有属性值的
self.__dict__的副本? -
@MartijnPieters 这可能会解决这种特定情况,但不能解决查找任意对象属性值的一般情况。
-
@NickBailey:API 经常使用属性,因为检索值可能有点昂贵,并且计算值被推迟到您真正需要它时。如果您确实需要,您可以自动发现类上的所有
property对象,但一般如果您不知道它们的用途,则戳所有属性不是一个好主意为。 -
某些属性不会出现在实例的
__dict__中。该属性确实出现在类'__dict__中。看看这个stackoverflow.com/questions/14361256/… -
@MartijnPieters。一个公平的观点。但是,如果您使用的是已知的类 API,那您为什么还要使用 dict?
标签: python python-2.7 object dictionary