Ben*_*rts 6 python inheritance
这可能是一个糟糕的想法(随时告诉我它是否可以),但我正在探索Python的界限,我可以看到它是如何有用的(事实上,我正在研究它的潜在案例)马上).
这是设置:
---(API文件)---
class APINode(object):
def __init__(self, *args, **kwargs):
# initialize some instance variables
def render(self, arg1, arg2):
# do some stuff and return something
def api_function( arg1, arg2 ):
# do some stuff
return APINode(args, kwargs)
Run Code Online (Sandbox Code Playgroud)
----(我的档案)----
class MyNode(APINode):
def render(self, arg1, arg2):
#My override of APINode's render
def my_function( arg1, arg2 ):
api_parent_instance = api_function( arg1, arg2 )
#Can I some how create an instance of MyNode from api_parent_instance here?
Run Code Online (Sandbox Code Playgroud)
我想稍微修改api_function的输出,基本上只是为了覆盖它返回的对象中的render函数.我觉得我的选择是:(1,yuck)将api_function的内容复制到my_function中,但只是构造并返回一个MyNode而不是一个APINode,或者(2,可能?)只是从my_function调用api_function,让它做它的工作 - 构造和返回一个APINode类型的对象,然后我可以以某种方式从该对象创建一个MyNode,以覆盖该方法.
它归结为:在Python中,是否可以从父类的实例构造子类的实例?
(看起来很熟悉或想知道实际情况是什么?我正在尝试扩展Django模板标签.)
我认为你会更乐意使用MyNode包装APINode,而不是扩展它.您可以实现自己的render()方法,并将所有其他方法委托给包装的APINode.然后,您将能够从现有的APINode创建新的MyNode.
无法从父实例创建子实例.父实例是APINode的实例,您无法更改对象的类.
| 归档时间: |
|
| 查看次数: |
1273 次 |
| 最近记录: |