Python:是否可以从父类的实例构造子类的实例?

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模板标签.)

Ned*_*der 7

我认为你会更乐意使用MyNode包装APINode,而不是扩展它.您可以实现自己的render()方法,并将所有其他方法委托给包装的APINode.然后,您将能够从现有的APINode创建新的MyNode.

无法从父实例创建子实例.父实例是APINode的实例,您无法更改对象的类.