Python - Использование метода и функций - PullRequest
0 голосов
/ 24 октября 2018

Я хочу написать скрипт, который может читать структуру из модели AutoDesk Inventor.Inventor установлен и работает, и к нему установлено соединение через win32.com.После загрузки модели установки нескольких переменных я застрял.

У меня есть этот список oStructuredBOMView.BOMRows

>> print(len(oStructuredBOMView.BOMRows))
2

Я могу сослаться на один элемент

>> print(oStructuredBOMView.BOMRows.Item(1))
<win32com.gen_py.Autodesk Inventor Object Library.BOMRow instance at 0x88831536>

И с помощью dir я могу отобразить все функции / методы

>> print(dir(oStructuredBOMView.BOMRows.Item(1)))
['CLSID', 'GetReferenceKey', '_ApplyTypes_', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_get_good_object_', '_get_good_single_object_', '_oleobj_', '_prop_map_get_', '_prop_map_put_', 'coclass_clsid']

Это точка, которую я не могу превзойти.Как я могу использовать эти функции / методы для получения дополнительной информации?Пример:

>> oStructuredBOMView.BOMRows.Item(1).sizeof
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    oStructuredBOMView.BOMRows.Item(1).sizeof
  File "C:\python\Python35\lib\site-packages\win32com\client\__init__.py", line 473, in __getattr__
    raise AttributeError("'%s' object has no attribute '%s'" % (repr(self), attr))
AttributeError: '<win32com.gen_py.Autodesk Inventor Object Library.BOMRow        instance at 0x88417896>' object has no attribute 'sizeof'

>> sizeof(oStructuredBOMView.BOMRows.Item(1))
Traceback (most recent call last):
  File "<pyshell#23>", line 1, in <module>
sizeof(oStructuredBOMView.BOMRows.Item(1))
NameError: name 'sizeof' is not defined

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Браузер объектов изобретателя - ваш лучший друг, чтобы увидеть свойства и методы каждого класса в изобретателе.Чтобы открыть его, перейдите в редактор VBA и нажмите F2.

>> print(oStructuredBOMView.BOMRows.Item(1))
<win32com.gen_py.Autodesk Inventor Object Library.BOMRow instance at 0x88831536>

Это говорит о том, что класс BOMRow.Введите имя класса в поле поиска и перейдите оттуда.

0 голосов
/ 24 октября 2018

Во-первых, sizeof не является допустимой функцией Python, поэтому ваша вторая попытка не сработает.

Во-вторых, ваш атрибут объекта BOMRows Item называется __sizeof__, поэтому вы должны использовать его, а не только'sizeof':

oStructuredBOMView.BOMRows.Item(1).__sizeof__

В-третьих, это просто атрибуты объекта, они могут быть или не быть функциями / методами, вы можете узнать, какие из них можно вызвать с помощью:

isMethod = callable(oStructuredBOMView.BOMRows.Item(1).__sizeof__)

См. https://docs.python.org/3/library/functions.html#callable

Обновление: вы можете попробовать print() все атрибуты (это довольно очевидно, так что вы, возможно, уже пробовали это).Поскольку я ничего не знаю о моделях AutoDesk Inventor, я не могу помочь вам с прямым ответом, но вы могли бы попытаться глубже изучить объект.Если атрибут является «примитивным типом» (читай: печатный объект или объект, имеющий некоторое строковое представление), вы можете использовать его напрямую.Если ваш атрибут возвращает другой объект, вам придется снова проанализировать его с помощью dir() или vars().Вы можете игнорировать большинство атрибутов двойного подчеркивания, так как они наиболее вероятны из python.

Пример попытки печати всех атрибутов неизвестного объекта:

for key in dir(my_obj):
    print('{}: {}'.format(key, getattr(my_obj, key))

Но я уверен, что тамдолжна быть доступна документация по использованию объектов Autodesk Inventor.

...