我正在编写一个框架,供了解一些 Python 的人使用。我已经确定了一些语法,对我和他们来说使用这样的东西是有意义的,其中 Base 是实现框架的 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__
方法时,属性字典只包含一个 key f
。我的想法是使用另一个装饰器,例如@duplicate
让用户表示正在发生这种情况,并且两者f
的包装方式不同,因此它们不会相互覆盖。像这样的东西可以工作吗?