Ski*_*927 4 python dictionary object python-2.7
我是 Python 新手,所以请原谅我是否对一些简单的事情感到困惑。
我有一个这样的对象:
class myObject(object):
def __init__(self):
self.attr1 = None
self.attr2 = None
@property
def prop1(self):
return foo.some_func(self.attr1)
Run Code Online (Sandbox Code Playgroud)
我像这样实例化它:
a = myObject()
a.attr1 = 'Apple'
a.attr2 = 'Banana'
Run Code Online (Sandbox Code Playgroud)
它所包含的方法期望返回 dict,所以我这样做:
return a.__dict__
Run Code Online (Sandbox Code Playgroud)
但prop1不包括在退货中。我明白为什么会这样,它不在对象的__dict__因为它只包含真实属性。
所以问题是,我怎样才能返回,返回这样的东西:
{'attr1': 'Apple', 'attr2': 'Banana', 'prop1': 'ModifiedApple'}
Run Code Online (Sandbox Code Playgroud)
除了在返回之前做:
a.prop1_1 = a.prop1
Run Code Online (Sandbox Code Playgroud)
你想要的是inspect模块。
a = myObject()
a.attr1 = 'Apple'
a.attr2 = 'Banana'
inspect.getmembers(a)
Run Code Online (Sandbox Code Playgroud)
回报
[('attr1','Apple'),('attr2','Banana'),('prop1','ModifiedApple')...]
Run Code Online (Sandbox Code Playgroud)
请注意, getmembers 还将返回内置成员,例如__sizeof__,因此您可能需要对列表应用一些过滤。
如果你想把它当作字典,你可以随时使用
dict(inspect.getmembers(a))
Run Code Online (Sandbox Code Playgroud)
你应该离开__dict__,只将它用于直接存在于实例上的属性。
如果您需要生成一个包含属性名称和值的字典,您可以添加另一个生成新字典的属性或方法:
@property
def all_attributes(self):
return dict(vars(self), prop1=self.prop1)
Run Code Online (Sandbox Code Playgroud)
这可以通过内省自动检测所有属性对象,但要考虑到您使用属性以避免首先进行计算;触发所有属性的计算可能不是那么理想。
| 归档时间: |
|
| 查看次数: |
3299 次 |
| 最近记录: |