Я использую COM-объекты в python для предоставления программируемых интерфейсов стороннему программному обеспечению. Это достигается с помощью Dispatch
из win32com.client
. В моем проекте также использовалась подсказка типа из python .3.7, однако я не уверен, как бы вы определили тип этих COM-объектов для целей подсказки типа. Этот вопрос относится ко всем имеющимся у меня COM-объектам, реальным примером является набор записей Microsoft Direct X: Dispatch("ADODB.Recordset")
.
from win32com.client import Dispatch
def create_my_com_object_instance(input_arg: Dict[str, Union[str, float, int]]) -> <type_of_com_object_here>:
my_instance = Dispatch("ADODB.Recordset")
# Set attributes/call methods of this instance here ...
return my_instance
. В приведенном выше фрагменте кода я бы заменил type_of_com_object_here на COM-объект type.
Моей первой мыслью было просто вызвать type()
для экземпляра и использовать возвращаемый тип:
x = Dispatch("ADODB.Recordset")
x
Out[1]: <win32com.gen_py.Microsoft ActiveX Data Objects 6.1 Library._Recordset instance at 0x83848456>
type(x)
Out[2]: win32com.gen_py.B691E011-1797-432E-907A-4D8C69339129x0x6x1._Recordset._Recordset
x.__class__
Out[3]: win32com.gen_py.B691E011-1797-432E-907A-4D8C69339129x0x6x1._Recordset._Recordset
Это не возвращает подходящий тип для определения COM-объекта. Я считаю, что я мог бы создать абстрактный базовый класс, используя TypeVar('T')
и Generic[]
, однако я не уверен, есть ли более питонная / лучшая альтернатива.
Спасибо