在类中实例化python库类的有效方法?

时间:2019-03-30 09:00:16

标签: python

我一直在阅读有关slots的内容,由于这似乎是一个严重的内存问题,与我熟悉的C ++和Java有所不同,所以我只是想知道实例化类的正确方法我班上其他图书馆的图书馆。
示例:这是我当前的大致操作方式:

import pymunk
from pymunk import Vec2d
class RobotBody(object):
    chassisXY = Vec2d(0, 0)
    chassisMass = 10
    chassis_b = []  # chassis body
    chassis_s = []  # chassis shape

    def __init__(self, chassisCenterPosition):
        self.chassisXY = chassisCenterPosition
        self.chassis_b = pymunk.Body(self.chassisMass, pymunk.moment_for_box(self.chassisMass, (100, 100)))
        self.chassis_b.position = self.chassisXY
        self.chassis_shape = pymunk.Poly.create_box(self.chassis_b, (100, 100))

rb = RobotBody(Vec2d(600, 100))

但是,像这样实例化chassis_bchassis_s的正确方法是吗?

chassis_b = pymunk.Body()  # chassis body
chassis_s = pymunk.Poly()  # chassis shape

无论如何,在Body期间,成员变量将被其他Poly__init__对象替换,因此值得用类实例实例化它们还是有方法实例化它为null,希望可以节省内存/处理时间?我尝试使用pass,但在这种情况下似乎不起作用。对于Vec2d或使用的任何其他第三方库类,我都有相同的问题。

如果我能提供一些有关此内存管理如何在Python中发生的信息/指针,那也很好。

更新:我刚刚发现无法实例化chassis_b = pymunk.Body(),因为Body()需要传递三个参数。不过,我的问题仍然相同。

1 个答案:

答案 0 :(得分:1)

如果您确实要声明类属性,则可以使用None(以免花时间进行实例化)。

class RobotBody(object):
    chassisXY = None
    chassisMass = 10
    chassis_b = None  # chassis body
    chassis_s = None  # chassis shape

但是,在您的特定情况下,实际上并不需要chassisXYchassis_bchassis_s作为类属性,因为您总是在RobotBody.__init__中实例化它们。因此,为了更好地利用内存/时间,您可以删除它们。

在Python中,None是您的null