我有c类定义和该类的一些内部类定义:
class DoXJob():
def __init__(self, param1, param2):
<choose an inner class to use>
def DoIt(self):
pass
def Finalize(self):
<do finalization>
class DoXInSomeWay():
def __init__(self):
....
....
def DoIt(self):
...
class DoXInSomeOtherWay():
def __init__(self):
....
....
def DoIt(self):
...
逻辑很简单,我有一些内部类定义来处理作业,我用一些参数调用DoXJob
,然后决定使用哪个内部类,并覆盖DoXJob.DoIt
方法选择的内部类方法(DoXInSomeOtherWay.DoIt
或DoXInWay.DoIt
)
obj = DoXJob(param1, param2)
obj.DoIt()
一切都很好,我想要的是从ineer类中触发DoXJob.Finalize
,比如从DoXInSomeOtherWay.DoIt
或DoXInWay.DoIt
调用它。但我不知道如何处理这个,以及它是否是正确的方法。或者更好地将DoXJob
方法调用为:
obj = DoXJob(param1, param2)
obj.DoIt()
obj.Finalize()
答案 0 :(得分:2)
不幸的是,python似乎没有办法引用封闭的实例。
相反,在你的外部__init__
中,你选择使用哪个内部类,并且可能实例化它,你需要将外部对象的self
作为参数传递给内部类实例。 / p>
编辑:挑选重新设计的主题 - 如果您只需调用DoIt
方法,然后等待其返回,那么您可以在同一个地方调用Finalize
(来电者,即是),因此避免了内部呼唤外部的需要。