class Base(object):
def __init__(self, data):
self.data = data
def __repr__(self):
return '<{} ({})>'.format(self.__class__.__name__, self.data)
class Dark(Base):
x = 0
class Light(Base):
x = 255
def data_factory(data, Type1, Type2):
delta1 = abs(data - Type1.x)
delta2 = abs(data - Type2.x)
if delta1 < delta2:
SelectedType = Type1
else:
SelectedType = Type2
obj = SelectedType(data)
return obj
print data_factory(10, Dark, Light) # >>> <Dark (10)>
print data_factory(126, Dark, Light) # >>> <Dark (126)>
print data_factory(129, Dark, Light) # >>> <Light (129)>
print data_factory(250, Dark, Light) # >>> <Light (250)>
Если посмотрите, в коде не создается ни одного экземпляра.
Экземпляр создается на основе объекта класса
Расшифруйте, что вы понимаете под хинтингом для класса
нужно было написать, что для 2.7 версии
Используйте docstring annotation
если я правильно понял, что имеется в виду
Хинтинг типа можно делать через Type[Base], но это требует ряд дополнительных условий, которые обсуждаются в ветке комментариев ниже. Если интересно, почитайте.