Ich habe ein paar Fragen zu Klassen in Python.
Es gibt die Bullet-Klasse, die ein abstraktes Geschoss in einem Computerspiel darstellt, und es wird eine Menge ihrer Instanzen geben (ich versuche ein "bullet hell" Spiel zu machen :). Die Instanzen haben das gleiche Bild und die gleiche Bewegungsfunktion, während sie sich an unterschiedlichen Positionen befinden. Im folgenden Code habe ich versucht, gemeinsame Dinge in Klassenattributen zu platzieren und ihre Werte mit der class_init
-Klassenmethode zu laden. Das Ziel ist es, Daten zu deduplizieren und etwas Speicher zu sparen.
Q1: Ist diese class_init
-Methode das richtige Vorgehen? Vielleicht gibt es einen eleganteren Weg.
Q2: Wird sich tatsächlich der Speicherverbrauch verbessern?
GELÖST: Vielen Dank für eure Tipps, alle! Ich denke, ich lag mit meinem Code nicht völlig falsch, obwohl er verbessert werden könnte. Ich muss noch über Metaklassen, Slots und Profiling in Python lesen. Es gibt also noch einen langen Weg zu gehen, seufz. Trotzdem, vielen Dank!
class Bullet(object):
@classmethod
def class_init(cls, image, movement_function):
cls.image = image
cls.movement_function = movement_function
def __init__(self, pos):
super(Bullet, self).__init__()
self.pos = pos
if __name__ == '__main__':
Bullet.class_init('sprite.png', lambda x: x + 1)
b1 = Bullet((10,10))
b2 = Bullet((20,20))
print 'pos', id(b1.pos) == id(b2.pos)
print 'image', id(b1.image) == id(b2.image)
print 'movement_function', id(b1.movement_function) == id(b2.movement_function)