Seite 1 von 1

Eine class mehrmals laden

Verfasst: Mittwoch 18. März 2020, 12:34
von Cesar
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?

Re: Eine class mehrmals laden

Verfasst: Mittwoch 18. März 2020, 14:31
von xXSkyWalkerXx1
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.

Re: Eine class mehrmals laden

Verfasst: Mittwoch 18. März 2020, 15:49
von __blackjack__
@Cesar: Was bedeutet für Dich das ”laden” einer Klasse? Module kann man laden, Klassen nicht.

Re: Eine class mehrmals laden

Verfasst: Mittwoch 18. März 2020, 20:41
von Cesar
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.

Re: Eine class mehrmals laden

Verfasst: Mittwoch 18. März 2020, 22:45
von __blackjack__
@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?