Python - вопрос о фабричных функциях - PullRequest
0 голосов
/ 10 октября 2010

У меня есть серия классов, которые я буду регистрировать как сервисы для абстрагирующего класса более высокого уровня. Класс высокого уровня будет иметь функцию, которая получает класс нижнего уровня на основе init аргументов и т. Д. Это звучит как бешенство? Кроме того, как это называется? Я называю это фабричной функцией / классом, но на самом деле понятия не имею (что усложняет лучшие практики Google).

1 Ответ

2 голосов
/ 10 октября 2010

Это называется "программирование метакласса".В последних версиях Python это реализовано путем определения статического метода __new__() и возврата объекта соответствующего типа.

class C(object):
  def __new__(cls, val):
    if val == 5:
      return 'five'
    else:
      return super(C, cls).__new__(cls)

c1 = C(3)
print c1
c2 = C(5)
print c2
...