2012-05-30 3 views
1

Я пытаюсь получить имя класса win32 win32. Но атрибут __name__ для него не определен.__name__ атрибут в Python для Win32_ComputerSystem?

>> 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

От того, что я могу сказать, глядя на the documentation (в частности, на основе this snippet), wmi.Win32_ComputerSystem - это класс, а не метод. Если вы хотите, чтобы получить его имя, которое вы могли бы попробовать:

machine.Win32_ComputerSystem.__class__.__name__ 
+1

Да, это не функция, это экземпляр класса старого стиля. – kindall

+0

Это просто возвращает общий «_wmi_class» –

1

Я нашел способ, чтобы получить вывод, который я хочу, однако он меня не удовлетворяет.

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

возвращается: 'Win32_ComputerSystem'

Там должно быть более Pythonic способ сделать это.

Смежные вопросы