Разделить большой объект на более мелкие суб-объекты в экземпляре

Как питонный способ обращаться с большими объектами? В моем примере у меня мог быть один большой класс, создающий один экземпляр со многими атрибутами, или я мог бы сгруппировать некоторые из них вместе (см. Класс Car и класс Motor):

class Car(object):

    color = "red"

    def __init__(self, num_wheels):
        self.burst = Motor(self)
        self.wheels = num_wheels
        for i in range(self.wheels):
            setattr(self, "wheel{}".format(i), Wheel(self, i))

    def _query(self, value):
        print "Get Serial Data: {}".format(value)


class Motor(object):  # Object is loaded only once in Car instance

    def __init__(self, top):
        self._top = top

    def temperature(self):
        return self._top._query("GET MOTOR TEMP")

    def rpm(self):
        return self._top._query("GET MOTOR RPM")


class Wheel(object):  # Object could be loaded many times in Car instance

    def __init__(self, top, number):
        self._top = top
        self._number = number

    def temperature(self):
        return self._top._query("GET WHEEL TEMP {}".format(self._number))

    def rpm(self):
        return self._top._query("GET WHEEL RPM {}".format(self._number))

Я думаю, что это даже имеет больше смысла, когда у автомобиля более одного колеса, так как я мог бы добавить больше колес.

Но поскольку Motor никогда не используется более одного раза и никогда не используется где-либо еще, лучше ли поместить их в класс Car:

class Car(object):

    color = "red"

    def __init__(self, num_wheels):
        # Add wheels or other stuff

    def _query(self, value):
        print "Get Serial Data: {}".format(value)


    def motor_temperature(self):
        return self._query("GET MOTOR TEMP")

    def motor_rpm(self):
        return self.._query("GET MOTOR RPM")

Мне нужно будет получить доступ к Car._query() из класса Wheel и / или Motor, и мой реальный объект содержит около 40 атрибутов и методов, которые я мог бы сгруппировать в 4-5 вложенных экземпляров. Не могу найти много по этой теме в Интернете.

1 ответ

Если вы используете большое количество экземпляров, вы можете использовать слоты, чтобы уменьшить объем памяти.

Другие вопросы по тегам