列出对象的属性

539 投票
18 回答
1146639 浏览
提问于 2025-04-15 21:49

有没有办法获取一个类的实例上存在的属性列表呢?

class new_class():
    def __init__(self, number):
        self.multi = int(number) * 2
        self.str = str(number)

a = new_class(2)
print(', '.join(a.SOMETHING))

我想要的结果是输出“multi, str”。我想通过这个来查看脚本中各个部分当前的属性。

18 个回答

191

之前的所有回答都是正确的,你有三种选择来解决你问的问题。

  1. dir():这个是一个函数,可以用来查看一个对象里面有什么属性和方法。

  2. vars():这个函数可以用来获取一个对象的属性字典,简单来说就是把对象的属性以字典的形式展示出来。

  3. __dict__:这是一个特殊的属性,直接访问它可以看到对象的所有属性和它们的值。

>>> dir(a)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'multi', 'str']
>>> vars(a)
{'multi': 4, 'str': '2'}
>>> a.__dict__
{'multi': 4, 'str': '2'}
239
dir(instance)
# or (same value)
instance.__dir__()
# or
instance.__dict__

然后你可以用 type() 来检查变量是什么类型,或者用 callable() 来判断它是否是一个可以调用的方法。

463
>>> class new_class():
...   def __init__(self, number):
...     self.multi = int(number) * 2
...     self.str = str(number)
... 
>>> a = new_class(2)
>>> a.__dict__
{'multi': 4, 'str': '2'}
>>> a.__dict__.keys()
dict_keys(['multi', 'str'])

你可能会觉得 pprint 很有用。

撰写回答