如何在python中获取对象的属性[重复]
Posted
技术标签:
【中文标题】如何在python中获取对象的属性[重复]【英文标题】:How to get properties of object in python [duplicate] 【发布时间】:2020-01-30 07:13:44 【问题描述】:class ClassB:
def __init__(self):
self.b = "b"
self.__b = "__b"
@property
def propertyB(self):
return "B"
我知道getattr,hasattr...
可以访问该属性。
但是为什么没有iterattr
或listattr
?
ClassB
对象的预期结果:
'propertyB': 'B'
ClassB
类的预期结果:
['propertyB']
感谢@juanpa.arrivillaga 的评论。
vars(obj)
和 vars(obj.__class__)
不一样!
【问题讨论】:
要获取对象的属性,请使用vars(obj)
。注意,property
对象属于 class 而不是 instance
请注意,您的property
不知道它会始终返回B
。
@juanpa.arrivillaga 如果我知道房产名称,我可以通过getattr
获取值
如果您的财产返回random.random()
,该怎么办?
@juanpa.arrivillaga 在这种情况下,我认为该值应与getattr(b_object, 'randomProperty')
相同。
【参考方案1】:
要列出 python 类的属性,您可以使用 __dict__
例子
>>> class C(object):
x = 4
>>> c = C()
>>> c.y = 5
>>> c.__dict__
'y': 5
有关更多示例和信息,请参阅此链接 - https://codesachin.wordpress.com/2016/06/09/the-magic-behind-attribute-access-in-python/
【讨论】:
【参考方案2】:使用内置vars
如下:
properties = []
for k,v in vars(ClassB).items():
if type(v) is property:
properties.append(k)
使用列表理解:
>>> [k for k,v in vars(ClassB).items() if type(v) is property]
['propertyB']
【讨论】:
以上是关于如何在python中获取对象的属性[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在Python中的for循环内创建对象列表而不继承属性值[重复]
Django/Python DRY:使用 Q 对象和模型属性时如何避免重复代码