Походит вы после «общей функции», которая ведет себя по-разному на основе приведенных аргументов. Это немного похоже на то, как вы получите отличия t, когда вы вызываете метод на другом объекте, но вместо того, чтобы просто использовать первый аргумент (объект/я) для поиска функции, вы используете все аргументы.
Turbogears использует что-то вроде этого, чтобы решить, как преобразовать объекты в JSON - если я правильно помню.
Там в an article from IBM об использовании диспетчера пакетов для такого рода вещи:
Из этой статьи:
import dispatch
@dispatch.generic()
def doIt(foo, other):
"Base generic function of 'doIt()'"
@doIt.when("isinstance(foo,int) and isinstance(other,str)")
def doIt(foo, other):
print "foo is an unrestricted int |", foo, other
@doIt.when("isinstance(foo,str) and isinstance(other,int)")
def doIt(foo, other):
print "foo is str, other an int |", foo, other
@doIt.when("isinstance(foo,int) and 3<=foo<=17 and isinstance(other,str)")
def doIt(foo, other):
print "foo is between 3 and 17 |", foo, other
@doIt.when("isinstance(foo,int) and 0<=foo<=1000 and isinstance(other,str)")
def doIt(foo, other):
print "foo is between 0 and 1000 |", foo, other
Повторите http://stackoverflow.com/questions/378927/what-is-the-best-idiomatic-way-to-check-the-type-of-a-python-variable. См. Ответ там. – monkut
См. Также: [Python-ideas - Предложение: используйте синтаксис mypy для аннотаций функций] (https://mail.python.org/pipermail/python-ideas/2014-August/028618.html) - автор: Guido van Rossum – NevilleDNZ
Текущий принятый ответ не дает решения. Я рекомендую [ответ Йоханнеса Вейса] (https://stackoverflow.com/a/734385/3357935), так как он лучше отвечает на заданный вопрос. –