我在Python程序中有一个相当复杂的类层次结构。这个程序有许多工具,它们不是模拟器就是编译器。这两种类型共享一些方法,因此有一个Shared
类作为所有类的基类。下面的示例如下所示:
class Shared:
__TOOL__ = None
def _Prepare(self):
print("Preparing {0}".format(self.__TOOL__))
class Compiler(Shared):
def _Prepare(self):
print("do stuff 1")
super()._Prepare()
print("do stuff 2")
def _PrepareCompiler(self):
print("do stuff 3")
self._Prepare()
print("do stuff 4")
class Simulator(Shared):
def _PrepareSimulator(self): # <=== how to create an alias here?
self._Prepare()
class Tool1(Simulator):
__TOOL__ = "Tool1"
def __init__(self):
self._PrepareSimulator()
def _PrepareSimulator(self):
print("do stuff a")
super()._PrepareSimulator()
print("do stuff b")
我可以将方法Simulator._PrepareSimulator
定义为Simulator/Shared._Prepare
的别名吗?在
我知道我可以创建本地别名,比如:__str__ = __repr__
,但是在我的例子中,_Prepare
在上下文中是未知的。我没有self
也没有cls
来引用这个方法。在
我可以编写一个decorator来返回_Prepare
而不是{_Prepare
?在
我也需要调整方法绑定吗?在
我设法创建了一个基于decorator的解决方案,它可以确保类型安全。第一个修饰符将别名注释到本地方法。需要保护别名目标。需要第二个修饰符来替换
Alias
实例,并检查别名是否指向类型层次结构中的方法。在装饰器/别名定义:
用法示例:
^{pr2}$将
@Alias(Shared._Prepare)
设置为@Alias(Shared2._Prepare)
将引发异常:相关问题 更多 >
编程相关推荐