как определить глубокую копию подкласса, если суперкласс настроил глубокую копию - PullRequest
0 голосов
/ 06 июня 2018

В моем суперклассе A есть метод copy (), который представляет собой настраиваемую функцию глубокого копирования.Подкласс B хочет унаследовать эту функцию глубокого копирования, а также глубокое копирование своего собственного члена и методов.

В следующем поясняющем примере функция копирования только копирует «часть» B. Мой вопрос заключается в том, как я могу изменить функцию копирования, чтобы также выполнить глубокое копирование члена T и метода addOn ().и другие потенциальные возможности класса?

class B(A):
    def __init__(self, T):
        super().__init__()
        self.T = T
    def addOn(self):
        print("additional feature")
    def copy(self):
        return super().copy()

1 Ответ

0 голосов
/ 06 июня 2018

Вы уже хорошо начали, вам просто нужно расширить функцию копирования подкласса:

class B(A):
    ...
    def copy(self):
        new_b = super().copy()  # new_b now has all the A stuff copied
        new_b.T = however_you_copy_a_T_instance(self.T)
        return new_b

Поскольку addOn - это просто метод, его не нужно копировать - это неявночасть любого экземпляра B.

Кроме того, если вы реализуете функции копирования вашего класса как __copy__() и __deepcopy__(), тогда ваш класс будет работать правильно со встроенными функциями копирования и глубокого копирования, предоставленными https://docs.python.org/3.6/library/copy.html (более подробную информацию смотрите в конце этой страницы).

...