返回属性名称和类型值的dict

时间:2014-04-23 13:53:24

标签: python python-3.x types attributes

NewType=type('nt',(object,),{'x':'hello'})
n=NewType()
n.x
'hello'

如何从n?

获取字典{'x':'hello'}

尝试失败:n.__bases__, n.__dir__, n.__dict__

1 个答案:

答案 0 :(得分:5)

您有类属性,因此NewType.__dict__可以正常工作。

替代路线将是:

type(n).__dict__
vars(NewType)
vars(type(n))

演示:

>>> NewType=type('nt',(object,),{'x':'hello'})
>>> n=NewType()
>>> n.x
'hello'
>>> NewType.__dict__
dict_proxy({'__dict__': <attribute '__dict__' of 'nt' objects>, 'x': 'hello', '__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'nt' objects>, '__doc__': None})
>>> type(n).__dict__
dict_proxy({'__dict__': <attribute '__dict__' of 'nt' objects>, 'x': 'hello', '__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'nt' objects>, '__doc__': None})
>>> vars(NewType)
dict_proxy({'__dict__': <attribute '__dict__' of 'nt' objects>, 'x': 'hello', '__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'nt' objects>, '__doc__': None})
>>> vars(type(n))
dict_proxy({'__dict__': <attribute '__dict__' of 'nt' objects>, 'x': 'hello', '__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'nt' objects>, '__doc__': None})

类字典中还有一些属性(包括__dict__本身)。