У меня есть немного кода Python, который зависит от проверки типа. Я постараюсь сформулировать мою проблему на языке математики, чтобы она была понятна. У меня есть несколько классов, которые соответствуют подмножествам друг друга и образуют цепочку наследования.
class Real(object):
pass
class Integer(Real):
pass
class Natural(Integer):
pass
И у меня есть кортежи, содержащие типы. Каждый из них соответствует области некоторой функции.
t1 = ( Real, Real )
t2 = ( Real , Integer )
Я хотел бы выполнить некоторую форму проверки типа, чтобы при наличии другого кортежа ( Natural , Natural )
, если каждая координата в кортеже является подклассом указанных доменов. Например, для некоторой функции getcompatibles
я бы хотел получить:
getcompatibles( ( Real, Real ) ) = [ t1 ]
getcompatibles( ( Real, Integer ) ) = [ t1, t2 ]
getcompatibles( ( Natural, Natural ) ) = [ t1, t2 ]
getcompatibles( ( Natural, Real ) ) = [ t1 ]
Единственное решение, которое я мог бы придумать, состоит в том, чтобы пройти через каждый домен for (t1, t2), проходящий через каждый из типов в __subclasses__
, и проверить, является ли оно isinstance
Истиной для заданного ввода.
Это крайне неэффективно, возможно, есть ли более питонский способ сделать это?