Я пишу фреймворк, который будет использоваться людьми, немного знакомыми с Python. Я остановился на некотором синтаксисе, и для меня и для них имеет смысл использовать что-то вроде этого, где Base - это базовый класс, реализующий структуру.
class A(Base):
@decorator1
@decorator2
@decorator3
def f(self):
pass
@decorator4
def f(self):
pass
@decorator5
def g(self)
pass
Вся моя структура реализована через метакласс Base. Эта настройка подходит для моего варианта использования, потому что все эти определяемые пользователем классы имеют богатый граф наследования. Я ожидаю, что пользователь реализует некоторые методы или просто оставит это с pass
. Большая часть информации, которую здесь дает пользователь, находится в декораторах. Это позволяет мне избегать других решений, в которых пользователю пришлось бы использовать обезьяну-патч, давать менее структурированные словари и тому подобное.
Моя проблема здесь в том, что f
дважды определяется пользователем (по уважительной причине), и это должно обрабатываться моей структурой. К сожалению, к тому времени, когда это дойдет до метода метакласса'__new__
, словарь атрибутов будет содержать только один ключ f
. Моя идея заключалась в том, чтобы использовать еще один декоратор, например @duplicate
, чтобы пользователь сигнализировал, что это происходит, и два f
должны быть обернуты по-разному, чтобы они не перезаписывали друг друга. Может что-то подобное сработает?
A().f()
? - person Eric   schedule 27.10.2012f
дважды может иметь вескую причину - что оно означает или должно делать? - person martineau   schedule 27.10.2012A
должно существовать. Исходя из этого, моя структура определяет различные версииf
s и создает различные подходящие классы, подобныеA
. Если хотите, это способ заниматься аспектно-ориентированным программированием, структурированным более классическим объектно-ориентированным способом. - person user1199915   schedule 27.10.2012