Eine class mehrmals laden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Cesar
User
Beiträge: 2
Registriert: Mittwoch 18. März 2020, 08:47

Hallo Liebe Community,

ich habe ein Problem und komme leider nicht mehr weiter.

Sagen wir, ich habe class A und class B.
class A öffnet beim laden ein Fenster bzw. erstellt es auch.

Mit class B möchte ich class A aufrufen, was auch super funktioniert.
Nur will ich, wenn ich ein zweitesmal class A aufrufe, dass es dann logischerweise 2 Fenster sind

Wie kann ich eine class mehrmals laden?
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Dazu solltest du uns deinen Code zeigen.

Denn, Mal angenommen du erzeugst das Fenster mit einem Button, dann schreibst du eine Funktion, die beim Klicken jedes Mal die Klasse erzeugt.
Z.B. so:

Code: Alles auswählen

def openWindow():
	window = WindowClass()
	window.show() 
Sprich, du erzeugst die Instanz nicht bei der Initialisierung der Klasse B, sondern erzeugst sie immer wieder beim Klick.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Cesar: Was bedeutet für Dich das ”laden” einer Klasse? Module kann man laden, Klassen nicht.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Cesar
User
Beiträge: 2
Registriert: Mittwoch 18. März 2020, 08:47

xXSkyWalkerXx1 hat geschrieben: Mittwoch 18. März 2020, 14:31 Dazu solltest du uns deinen Code zeigen.

Denn, Mal angenommen du erzeugst das Fenster mit einem Button, dann schreibst du eine Funktion, die beim Klicken jedes Mal die Klasse erzeugt.
Z.B. so:

Code: Alles auswählen

def openWindow():
	window = WindowClass()
	window.show() 
Sprich, du erzeugst die Instanz nicht bei der Initialisierung der Klasse B, sondern erzeugst sie immer wieder beim Klick.
Wenn ich das tue

Code: Alles auswählen

## Show attacker->szString to Player
	def ShowPlayer(self, szString, szName, iJob, iSex):
		chat.AppendChat(chat.CHAT_TYPE_INFO, "DEBUG: ShowPlayer")
		self.iNumber += 1
		hwnd = DynastyDuellText(szName, szString, 5.0, iJob, iSex, (self.iNumber * 10))
		# self.hwnd = None
die class:

Code: Alles auswählen

## Sidebar Screen
class DynastyDuellText(ui.ScriptWindow):
	def __del__(self):
		ui.ScriptWindow.__del__(self)
		
	def __init__(self, szName, szString, iDuration, iJob, iSex, iY):
		ui.ScriptWindow.__init__(self)
		self.szName = szName
		self.szString = szString
		self.iDuration = iDuration
		self.iJob = iJob
		self.iSex = iSex
		self.iY = iY
		
		self.__LoadWindow()
		self.configureChilds(szName, szString, iJob, iSex)
		
		self.Show()
		self.SetTop()
		
		self.WarteSchleife = WaitingDialog()
		self.WarteSchleife.Open(iDuration)
		self.WarteSchleife.SAFE_SetTimeOverEvent(self.Close)

Dann passiert nichts, bzw. nach dem Buttonklick. Es kommen auch keine Errors.
Also ich will sozusagen zwei Instanzen haben.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Cesar: Ähm, `hwnd` und „hungarian notation“? Sorry aber bitte programmiere Python und nicht VisualBasic in den 1990ern. Davon abgesehen das man auch in C und C++ das mit den Typpräfixen nicht mehr macht ist `sz` ja beispielsweise auch *falsch*. Ebenso `hwnd`. Wenn man `window` meint, sollte man das auch schreiben. ”Handles”, also opaque Zahlen die für irgend ein Objekt stehen gibt es in Python auch nicht.

Namen schreibt man in Python klein_mit_unterstrichen und ohne irgendwelche kryptischen Typpräfixe. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).

Vergiss ganz schnell das es `__del__()` gibt. Das macht nicht das was Du denkst und kann alleine durch die Existenz zu Speicherlecks führen. Und die hier gezeigte Implementierung macht noch nicht mal etwas sinnvolles, denn die ruft nur die gleiche Methode auf der Basisklasse auf – etwas was ganz automatisch der Fall wäre wenn man die Methode gar nicht implementiert hätte.

Doppelte führende Unterstriche bedeuten nicht „private“. Für nichtöffentliche Attribute verwendet man *einen* führenden Unterstrich.

Mehrzahl von „child“ ist „children“.

Aus dem gezeigten Code wird mir immer noch nicht klar was das Problem ist. Welches GUI-Rahmenwerk verwendest Du überhaupt?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten