Ich will gerade "properties" testen, und stoße aber auf ein Problem bezüglich der Setter-Methode. in der Klasse Jaeger, welche Sprite als Metaklasse verwendet wird bei image = "Schuss.bmp" die Settermethode nicht aufgerufen.
Bei self.rect = self.image.get_rect() die Getter-Methode aber schon. Er beschwert sich dann, dass __Bild nicht vorhanden sei.
Was mich auch verwundert ist, dass bei self.rect = self.image.get_rect() ein zusätlicher Parameter übergeben wird. In den ganzen Beispielen die ich gefunden habe, wird der Getter-Methode kein Parameter übergeben.
Warum funktioniert mein Ansatz nicht? Hab ich was wichtiges übersehen?
Code: Alles auswählen
#-----------------------------------------------
class Sprite(type):
#-----------------------------------------------
		def __init__(cls, name, bases, dict):
#´´´´´´´´´´´´´´´´´´´´´
			cls.image = property(cls._erhalte_Bild, cls._lade_Bild)
		def start(cls, Periodendauer):
#´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´
			cls.Gruppe = pg.sprite.Group()
			cls.Periodendauer = Periodendauer
			cls.Startzeit = pg.time.get_ticks()
			#cls.image.convert()
		def _lade_Bild(cls, Wert):
#´´´´´´´´´´´´´´´´´´´´´´´´´´´´
			cls.__Bild = pg.image.load("data/Grafiken/" + Wert)
			cls.__Bild.convert()	
		def _erhalte_Bild(cls, obj):
#´´´´´´´´´´´´´´´´´´´´´´´´´
			return cls.__Bild
		def erneuern(cls, Ereignisse):
#´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´
			Status = pg.time.get_ticks() - cls.Startzeit > cls.Periodendauer
			if Status:
				cls.Startzeit = cls.Periodendauer
			cls.Gruppe.update(Status, Ereignisse)
		def ausgeben(cls, Ziel):
#´´´´´´´´´´´´´´´´´´´´´´´´´´´
			cls.Gruppe.draw(Ziel)
#-----------------------------------------------
class Schuss(pg.sprite.Sprite):
#-----------------------------------------------
	__metaclass__ = Sprite
	image = "Schuss.bmp"
	def __init__(self, x, y):
#´´´´´´´´´´´´´´´´´´´´´´´´´´´
		pg.sprite.Sprite.__init__(self)
		self.rect = self.image.get_rect()
		self.midbottom = x, y
		self.Gruppe.add(self)
	def update(self, Status, Ereignisse):
#´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´
		if Status == True:
			self.rect.top += 1;
		if self.rect.bottom < 0:
			self.Gruppe.remove(self)
#-----------------------------------------------
class Jaeger(pg.sprite.Sprite):
#-----------------------------------------------
	__metaclass__ = Sprite
	image = "Gegner.png"
	def __init__(self, x):
#´´´´´´´´´´´´´´´´´´´´´´´´
		pg.sprite.Sprite.__init__(self)
		self.rect = self.image.get_rect()
		self.midbottom = x, -self.rect.height
		self.Gruppe.add(self)
	def update(self, Status, Ereignisse):
#´´´´´´´´´´´´´´´´´´´´´´´´´´´
		if Status == True:
			self.rect.top -= 1;
		if self.rect.top > 240:
			self.Gruppe.remove(self)
#-----------------------------------------------
if __name__ == "__main__":
#-----------------------------------------------
	pg.init()
	bildschirm = pg.display.set_mode((320,240))
	spielstatus = True
	Jaeger(50)
	
	Jaeger.start(3000)
	while spielstatus:
	
		ereignisse = pg.event.get()
		for ereignis in ereignisse:
			if ereignis.type == QUIT: spielstatus = False
		Jaeger.erneuern(ereignisse)
		Jaeger.ausgeben(bildschirm)
		pg.display.flip()



 wie du sie nennst, Ein schöner Ausdruck dafür, ist nötig da ich sozusagen Klassenfunktionen erben will. Was, so weit ich richtig liege nicht mit normaler Vererbung funktioniert. Daher die Metaklasse. Das problem ist eigentlich erst einmal garnicht die "property", sondern die Metaklasse. Ich hab nur gedacht es liegt an der "property".
  wie du sie nennst, Ein schöner Ausdruck dafür, ist nötig da ich sozusagen Klassenfunktionen erben will. Was, so weit ich richtig liege nicht mit normaler Vererbung funktioniert. Daher die Metaklasse. Das problem ist eigentlich erst einmal garnicht die "property", sondern die Metaklasse. Ich hab nur gedacht es liegt an der "property". 
