python继承方案_Python中带继承的动态方法绑定

我对python还不熟悉(大约一个月),我真希望我早一点就开始使用它(在使用perl多年之后)。在

问题:我希望对象根据其类型对同一方法调用具有不同的功能。这些方法在运行时根据加载的模块(组成所有对象)分配。在

问题:我想知道是否有一种流行的设计模式可以代替下面的设计模式,或者它是否已经有了一个设计模式的名称(很遗憾,我没有正式的CS背景,知道这将有助于我的文档)?

我有一个类层次结构(到现在为止,其中26个有3个基类)。只有基类有一些简单的方法(例如:add_child),并且每个派生类只使用新的数据属性(特定于派生类)扩展基类,必要时重写方法(例如:uu str_uu)。在

我处理的是树,其中节点属于不同的类。但是,节点应该具有相同的方法名(stringify,print_tree,emit,eval,transform_X等),从而允许简单/盲目的迭代器操作。每个方法可能执行不同的操作,但这些方法具有相同的调用名(如多态性)。在

我主要想根据节点的类型授予节点特定的能力(方法)。最初,我使用Visitor Pattern实现了这一点。但是,考虑到我是在Python中工作,我意识到我其实不必这么做。在

在下面的示例中,我有动态分配给类的方法。注意,在下面的例子中,迭代/递归方法调用名(print_tree)与函数名(generic__print_tree)不同。在#astmethods.py

def generic__print_tree(self, level=1):

"""

Desc: print nodes with indentation

Target: Any tree node

"""

print("{}> {}".format('-' * level, self))

for child in self.children:

child.print_tree((level + 1))

def ASTNode__stringify(self):

"""

Desc: Return string representation of the tree under this node

Target: AST/CFG nodes

"""

text = str(self)

for child in self.children:

text += ", { " + child.stringify() + " }"

return text

最后,main模块有这个函数,extend_types(),它在模块初始化期间被调用。在这个模块的上下文中,根据节点的类型(而不是值),节点将执行不同的操作。除非被重写,否则指定的方法将被继承。在

^{pr2}$

编辑:删除了分散注意力的信息,以单个模块上下文为例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值