Разделить большой объект на более мелкие суб-объекты в экземпляре
Как питонный способ обращаться с большими объектами? В моем примере у меня мог быть один большой класс, создающий один экземпляр со многими атрибутами, или я мог бы сгруппировать некоторые из них вместе (см. Класс 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 ответ
Если вы используете большое количество экземпляров, вы можете использовать слоты, чтобы уменьшить объем памяти.