【问题标题】:How to get properties of object in python [duplicate]如何在python中获取对象的属性[重复]
【发布时间】: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')相同。

标签: python python-3.x reflection


【解决方案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']
    

    【讨论】:

      猜你喜欢
      • 2021-07-11
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 2013-06-25
      相关资源
      最近更新 更多