Определение класса в другом классе и вызов родительского метода - PullRequest
3 голосов
/ 16 января 2012

У меня есть определение класса 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()

Все хорошо, что я хочудолжен вызывать DoXJob.Finalize из классов инер, как вызов его из DoXInSomeOtherWay.DoIt или DoXInWay.DoIt.Но я не знаю, как справиться с этим, и правильно ли это.Или лучше сделать как DoXJob вызов метода вроде:

obj = DoXJob(param1, param2)
obj.DoIt()
obj.Finalize()

1 Ответ

2 голосов
/ 16 января 2012

К сожалению, у python, похоже, нет способа сослаться на включающий экземпляр.

Вместо этого в вашем внешнем __init__, где вы выбираете, какой внутренний класс использовать, и предположительно создаете его экземпляр, вам нужно будет передать self внешнего объекта в качестве параметра в экземпляр внутреннего класса.

Редактировать: Подбирая тему редизайна - если вы можете просто вызвать метод DoIt, затем дождаться его возврата, то вы можете вызвать Finalize в том же месте (то есть, вызывающем), таким образом избегая необходимости для внутреннего называть внешним.

...