Вызов переопределенного метода родительского класса в родительском классе - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь переопределить две родительские функции класса train и eval в ChildClass.В родительском классе eval() в основном вызывает train().Однако я понимаю, что когда я пишу свой код, как показано ниже, eval() в родительском классе пытается вызвать функцию train() в ChildClass - я бы хотел eval() в родительском классевместо этого вызвать train() в родительском классе.

Мне просто интересно, есть ли какие-нибудь чистые решения для внесения изменений в ChildClass, которые позволили бы родительскому классу вызывать родительскую функцию train()?

class ChildClass(nn.Module):
    def __init__(self):
        super(ChildClass, self).__init__()

    def train(self):
        super(ChildClass, self).train()

    def eval(self):
        super(ChildClass, self).eval()

Родительский класс находится в пакете Python (pytorch), поэтому не следует вносить изменения:

class Module(object):
    #...

    def train(self, mode=True):
        # ...
        return self

    def eval(self):
        return self.train(False)

1 Ответ

0 голосов
/ 19 декабря 2018

Ваши переопределенные методы не делают ничего, кроме вызова родителя (по крайней мере, из кода, которым вы поделились).

Итак, я думаю, вы хотите иметь метод, который имеет те же шаги, что и в train () / eval ().Я предполагаю, что вам не нужно переопределять train () или eval (), вместо этого добавьте метод (ы) в ваш дочерний класс и вызовите parent train () / eval () в любом порядке, в котором вы хотите их смешать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...