Ситуация такая. Предположим, вы
from nastymodule import NastyObject1, NastyObject2, NastyObject3
и эти NastyObject
имеют скрытую реализацию, которая не раскрывает свои методы из-за неразрывного лабиринта интерфейсов (COM, вызовы dll и тому подобное), поэтому IDE не может их предложить , Из документации вы читаете, что у NastyObject1
есть метод do_thing
, у NastyObject2
есть метод do_other_thing
, а на самом деле
NO1 = NastyObject1()
res = NO1.do_thing()
NO2 = NastyObject2()
res = NO2.do_other_thing()
отлично работает как задокументировано. Единственная проблема заключается в том, что, как я уже сказал, IDE не знает из-за неясной реализации этого метода do_thing
или любых других методов этого класса. Теперь, по причинам, я должен написать уникальный NstObjWrapper
класс для всех этих NastyObject
, способных динамически выставлять эти методы.
Имейте в виду, что я уже написал NstObjWrapper
__getattr__
, так что
NOW1 = NstObjWrapper('NastyObject1')
res = NOW1.do_thing()
NOW2 = NstObjWrapper('NastyObject2')
res = NOW2.do_other_thing()
уже работает ; Мне нужно только найти способ динамически заставить IDE (и любой вид инспекторов классов) знать, что NOW1
имеет метод do_thing
, а NOW2
имеет метод do_other_thing
.
NstObjWrapper
может быть, при необходимости, проинформирован о методах НастиОбъекта посредством исчерпывающего, жестко запрограммированного диктанта:
methods_dict = {'NastyObject1': ['do_thing', ......]
'NastyObject2': ['do_other_thing', .......]
'NastyObject3': [.......]}
Но поскольку класс должен иметь возможность обернуть все объекты, которые имеют разные методы, вы не можете просто определить методы с одинаковыми именами, а затем вызвать методы обернутого NastyObject.
Возможно ли это? Как бы вы это сделали?