0

处理大对象的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(),而我的现实生活对象包含大约 40 个属性和方法,我可以将它们分组为 4-5 个子实例。在网上找不到太多关于这个主题的信息。

4

1 回答 1

0

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

于 2016-07-13T22:23:40.487 回答