Допустим, я хочу установить функции для каждого класса в модуле с именем 'MacroMethods'. Поэтому я установил singledispatch, увидев его в «Fluent Python» следующим образом:
@singledispatch
def addMethod(self, obj):
print(f'Wrong Object {str(obj)} supplied.')
return obj
...
@addMethod.register(MacroMethods.Wait)
def _(self, obj):
print('adding object wait')
obj.delay = self.waitSpin.value
obj.onFail = None
obj.onSuccess = None
return obj
Желаемое поведение - когда экземпляр класса 'MacroMethods.Wait' задан в качестве аргумента, singledispatch запускается зарегистрированным функция с этим типом класса.
Вместо этого она запускает функцию по умолчанию, а не зарегистрированную.
>>> Wrong Object <MacroMethods.Wait object at 0x0936D1A8> supplied.
Однако type () ясно показывает, что экземпляр является классом 'MacroMethods.Wait' и dict_keys свойство также содержит его.
>>> dict_keys([<class 'object'>, ..., <class 'MacroMethods.Wait'>])
Я подозреваю, что все пользовательские классы, которые я сделал, считаются типом 'object' и в результате не выполняют требуемые функции.
Есть ли способ решить эту проблему? Полные коды здесь .