在实例中将大对象拆分为较小的子对象

时间:2016-07-13 21:53:37

标签: python class instance subobject

处理大型物体的pythonic方法是什么?在我的例子中,我可以有一个大类创建一个具有许多属性的实例,或者我可以将它们中的一些组合在一起(参见类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")

我必须从Wheel和/或Motor类访问Car._query(),我的真实生活对象包含我可以在4-5个子实例中分组的大约40个属性和方法。在网上找不到这个主题。

1 个答案:

答案 0 :(得分:0)

如果您使用大量实例,则可以使用slots来减少内存占用。