如何在python中列出对象的所有属性(vars和dict不起作用)?

2024-06-06 14:26:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在下面的代码中迭代对象的所有可用属性并打印它们。我尝试了print(vars(usb)),usb.dictitems(),但都不起作用。有办法吗?你知道吗

import win32com.client
wmi = win32com.client.GetObject ("winmgmts:")

for usb in wmi.InstancesOf ("Win32_PnPEntity"):
    print(usb.deviceID)
    print(usb.Availability);
    print(usb.Caption);
    ....

Tags: 对象代码importclientfor属性varswmi
1条回答
网友
1楼 · 发布于 2024-06-06 14:26:04

使用dir()可以处理普通的python对象。我不熟悉win32com(我甚至不使用Windows),但这里有一个简单的例子:

In [1]: class Foo: 
   ...:     @property 
   ...:     def test(self): return 2 
   ...:                                                                                                                                                                                                                              

In [2]: f = Foo()                                                                                                                                                                                                                    

In [3]: dir(f)                                                                                                                                                                                                                       
Out[3]: 
['__class__',
 '__delattr__',
 '__dict__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__gt__',
 '__hash__',
 '__init__',
 '__le__',
 '__lt__',
 '__module__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 '__weakref__',
 'test']

In [4]: vars(f)                                                                                                                                                                                                                      
Out[4]: {}

除非所讨论的类正在做一些不寻常的事情,比如重写__getattr__,否则这应该是可行的。在这种情况下,我怀疑没有办法做到这一点,除非库本身提供了一种方法。你知道吗

编辑也可以被覆盖,这打破了这种自省。一种选择是由https://stackoverflow.com/a/6886536/11939043提出的

相关问题 更多 >