Инверсия контрольного контейнера в python: плохая практика? - PullRequest
0 голосов
/ 17 января 2020

У меня есть два класса, базовый класс и контейнерный класс. Мне нужен базовый класс для доступа к параметрам, которые хранятся в классе контейнера. Вместо того, чтобы передавать все параметры thous экземпляром базового класса, я решил обратиться непосредственно к контейнеру:

import numpy as np

class Baseclass:

    def __init__(self,value, ref_container):
        self.val = value
        self.ref_container = ref_container

    def raise_to_power(self):
        return self.val**self.ref_container.power

class Containerclass:

    def __init__(self,values, power):

        self.values = [Baseclass(val,self) for val in values]
        self.power = power

    def sum_of_powers(self):
        return np.sum([val.raise_to_power() for val in self.values])



plop = Containerclass(np.array([1,2,3,4]),2)

Это плохая практика? Как я могу достичь той же цели с помощью нескольких способов Pythoni c? Обратите внимание, что это имеет странный побочный эффект:

plop.values[1].ref_container.values[1].ref_container.values[1].ref_container == plop # True
...