用于Win32_ComputerSystem的Python中的__name__属性?

时间:2012-05-30 18:01:24

标签: python winapi attributes wmi pywin32

我正在尝试获取WMI win32类的名称。但是没有为它定义__name__属性。

>> import wmi
>> machine = wmi.WMI()
>> machine.Win32_ComputerSystem.__name__

我收到以下错误:

Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    machine.Win32_ComputerSystem.__name__
  File "C:\Python27\lib\site-packages\wmi.py", line 796, in __getattr__
    return _wmi_object.__getattr__ (self, attribute)
  File "C:\Python27\lib\site-packages\wmi.py", line 561, in __getattr__
    return getattr (self.ole_object, attribute)
  File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 457, in __getattr__
    raise AttributeError(attr)
AttributeError: __name__

我认为__name__属性是defined for all Python functions,所以我不知道这里有什么问题。这个函数怎么可能没有那个属性呢?

好的,我认为这是一个方法的原因是因为定义了machine.Win32_ComputerSystem(),但我认为这还不足以成为一种方法。我意识到这不是一种方法。

然而,这不起作用:

>> machine.Win32_ComputerSystem.__class__.__name__
'_wmi_class'

我希望它返回'Win32_ComputerSystem'。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

从我所看到的the documentation(具体地,基于this snippet),wmi.Win32_ComputerSystem是一个类,而不是一个方法。如果你想得到它的名字,你可以尝试:

machine.Win32_ComputerSystem.__class__.__name__

答案 1 :(得分:1)

我找到了一种获得我想要的输出的方法,但它并不能让我满意。

repr(machine.Win32_ComputerSystem).split(':')[-1][:-1]

返回:'Win32_ComputerSystem'

必须有更多的Pythonic方法才能做到这一点。