如何在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... 可以访问该属性。 但是为什么没有iterattrlistattr

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循环内创建对象列表而不继承属性值[重复]

如何在python中读取json对象[重复]

Django/Python DRY:使用 Q 对象和模型属性时如何避免重复代码

如何在对象列表或对象的一个​​或多个属性上使用 Distinct [重复]

JAVA 如何获取存放在MAP中的list 对象?

Python如何通过字符或数字动态获取对象的名称或者属性?