can Class als Parameter in Python übergeben, wie unter C++

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
Gast

Freitag 29. Juli 2005, 09:49

guten Tag zusammen,

ich wollte gerne in Python eine Klasse als Parameter übergeben, wie unter C++ template oder ähnliches. Kann man das machen? Wenn ja, wie bitte gebe ein Hint!

MfG
HL
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Freitag 29. Juli 2005, 10:13

Habe ich das richtig verstanden?

Du willst eine Klasseninstanz z.B. einer anderen Klasse übergeben?
Wenn ja:

class a:

def __init__(self,...
......

class b:

def __init__(self,wert,...
......


wert = a(...)
b(wert,...)

In der Klasse b kannst du dann einzelne Methoden der Klasse a aufrufen.

Gruss,
Toni
Gast

Freitag 29. Juli 2005, 10:28

hallo Toni,

Danke. Ok, als Objekte wie andere int, str..., Eigentlich wollte ich wissen, ob man es typsicher angeben, z.B. es akzeptiert nur bestimmte Klasse/Objekte, z.B ich wollte es nur int, aber nicht string akzeptieren!

Danke noch einmal!

HL
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Freitag 29. Juli 2005, 10:50

Ich verstehe deine Antwort nicht ganz.
Du kannst den Typ einer Variable bestimmen indem du folgendes
eingibst:

type(Variablenname)

Dann kannst du prüfen welcher Typ deine Variable hat.

Was bedeutet:
"...z.B. es akzeptiert nur bestimmte Klasse/Objekte, z.B ich wollte es nur int, aber nicht string akzeptieren!"

Du musst nicht wie in C sagen, dass du einen int übergeben willst.
Ich glaub in C ging das so:

void (char,int,....)

in Python:

def(s,i,...) # s ist eine char-Variable und i eine Integer.

Wenn du prüfen willst was du übergibst, benutze einfach type().
In einem if-Konstrukt kannst du dann dies überprüfen.

Gruss,
Toni
Gast

Freitag 29. Juli 2005, 12:50

Hallo Toni,

Danke, ich verstehe langsam :oops:

ich wollte meine Klasse nicht alle Objekte akzeptieren, sondern nur bestimmte. Es scheint mir in Python nicht zu gehen, so muss ich selbst überprüfen, before ich verwende, eventuell Exception erzeugen

Danke noch einmal!

HL
Benutzeravatar
Toni83
User
Beiträge: 125
Registriert: Donnerstag 28. Juli 2005, 10:53

Freitag 29. Juli 2005, 13:12

try:
......

except:

.....

wäre eine Möglichkeit dies vorerst übersichtlich zu lösen, da gebe ich dir recht.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 29. Juli 2005, 14:04

Anonymous hat geschrieben:ich wollte meine Klasse nicht alle Objekte akzeptieren, sondern nur bestimmte. Es scheint mir in Python nicht zu gehen, so muss ich selbst überprüfen, before ich verwende, eventuell Exception erzeugen
Sieh dir mal PyProtocols an, das klingt genau nach dem was du suchst.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Samstag 30. Juli 2005, 01:28

Wie schon erwähnt, wird es unter Python etwas anders gehandhabt. Wenn deine Funktion einen int "erwartet", gehst du mit ihr einfach wie mit einem Integer um, wenn das übergebene Objekt das nicht unterstützt, wird eine Exception ausgelöst.

Überlege dir zweimal, ob du wirklich auf den Typ testen muss. Wenn dein int-Parameter z.B. eine Größenangabe sein soll, kann es dir egal sein, ob es ein richtiger int ist, oder ein Datenbankobjekt (grob gesprochen)
fs111
User
Beiträge: 170
Registriert: Samstag 15. November 2003, 11:42
Kontaktdaten:

Montag 1. August 2005, 18:52

GvR hat zum Thema Typen mal sinngemäß gesagt:

"We don't care, we write unit tests."

Genau das solltest Du auch tun.

fs111
Pydoc-Integration in vim - Feedback willkommen: http://www.vim.org/scripts/script.php?script_id=910
Antworten