你知道是否有一个内置函数来从任意对象构建一个字典?我想做这样的事情:
>>> class Foo:
... bar = 'hello'
... baz = 'world'
...
>>> f = Foo()
>>> props(f)
{ 'bar' : 'hello', 'baz' : 'world' }
Run Code Online (Sandbox Code Playgroud)
注意:它不应包括方法.只有字段.
我想在Python中创建一个动态对象(在另一个对象内),然后为其添加属性.
我试过了:
obj = someobject
obj.a = object()
setattr(obj.a, 'somefield', 'somevalue')
Run Code Online (Sandbox Code Playgroud)
但这没用.
有任何想法吗?
编辑:
我从for循环中设置属性,循环遍历值列表,例如
params = ['attr1', 'attr2', 'attr3']
obj = someobject
obj.a = object()
for p in params:
obj.a.p # where p comes from for loop variable
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我会得到obj.a.attr1,obj.a.attr2,obj.a.attr3.
我使用了这个setattr函数因为我不知道怎么做obj.a.NAME一个for循环.
如何根据p上面示例中的值设置属性?
很多时候,我发现自己想在Python中使用一个简单的"转储"对象,其行为类似于JavaScript对象(即,其成员可以使用.member或使用['member']).
通常我会把它放在以下的顶部.py:
class DumbObject(dict):
def __getattr__(self, attr):
return self[attr]
def __stattr__(self, attr, value):
self[attr] = value
Run Code Online (Sandbox Code Playgroud)
但这有点蹩脚,并且该实现至少存在一个错误(尽管我不记得它是什么).
那么,标准库中有类似的东西吗?
并且,为了记录,简单的实例化object不起作用:
>>> obj = object() >>> obj.airspeed = 42 Traceback (most recent call last): File "", line 1, in AttributeError: 'object' object has no attribute 'airspeed'
编辑 :(当,应该看到这一个来了)...别担心!我不是想用Python编写JavaScript.我经常发现我想要的地方就是在我还在试验的时候:我有一些"东西"的集合,这些东西不太适合放入字典,但也不适合拥有自己的课程.