我一直在阅读有关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_b
和chassis_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()
需要传递三个参数。不过,我的问题仍然相同。
答案 0 :(得分:1)
如果您确实要声明类属性,则可以使用None
(以免花时间进行实例化)。
class RobotBody(object):
chassisXY = None
chassisMass = 10
chassis_b = None # chassis body
chassis_s = None # chassis shape
但是,在您的特定情况下,实际上并不需要chassisXY
,chassis_b
和chassis_s
作为类属性,因为您总是在RobotBody.__init__
中实例化它们。因此,为了更好地利用内存/时间,您可以删除它们。
在Python中,None
是您的null
。