列出对象的属性
有没有办法获取一个类的实例上存在的属性列表呢?
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
之前的所有回答都是正确的,你有三种选择来解决你问的问题。
dir()
:这个是一个函数,可以用来查看一个对象里面有什么属性和方法。vars()
:这个函数可以用来获取一个对象的属性字典,简单来说就是把对象的属性以字典的形式展示出来。__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 很有用。