如何在python中获取对象的属性
我知道如何在python中获取对象的属性,python,python-3.x,reflection,Python,Python 3.x,Reflection,我知道getattr,hasattr…可以访问该属性。 但是为什么不使用iteratr或listtr ClassB对象的预期结果: class ClassB: def __init__(self): self.b = "b" self.__b = "__b" @property def propertyB(self): return "B" ClassBclasse的预期结果: {'propertyB': 'B'} 谢
getattr,hasattr…
可以访问该属性。
但是为什么不使用iteratr
或listtr
ClassB
对象的预期结果:
class ClassB:
def __init__(self):
self.b = "b"
self.__b = "__b"
@property
def propertyB(self):
return "B"
ClassB
classe的预期结果:
{'propertyB': 'B'}
谢谢@juanpa.arrivillaga的评论。
vars(obj)
和vars(obj.\uuuuu class\uuuu)
是不同的 使用内置的,如下所示:
['propertyB']
使用列表理解:
>[k表示k,v表示变量(ClassB).items(),如果类型(v)是属性]
['propertyB']
要列出python类的属性,可以使用\uuu dict\uuu
范例
properties = []
for k,v in vars(ClassB).items():
if type(v) is property:
properties.append(k)
有关更多示例和信息,请参见此链接-要获取对象的属性,请使用
vars(obj)
。请注意,property
对象属于类而不是实例,请注意,您的property
不知道它将始终返回B
@juanpa.arrivillaga如果我知道属性的名称,我可以通过getattr
获取值,如果您的属性返回random.random()
?@juanpa.arrivillaga在这种情况下,我认为该值应与getattr(b_object,'randomProperty')
相同。
>>> class C(object):
x = 4
>>> c = C()
>>> c.y = 5
>>> c.__dict__
{'y': 5}