Seite 1 von 1

Module und Klassen

Verfasst: Dienstag 26. Oktober 2004, 08:25
von pSy
Hallo mal wieder...

Ich würde gern in meinem Hauptscript den Modulen Klassen und Funktionen anbieten. Also ist die eigentliche Frage: Wie kann ein Modul auf Funktionen, Klassen oder Variablen seines MainScriptes zugreifen?

Danke im Vorraus
pSy

Verfasst: Dienstag 26. Oktober 2004, 10:18
von mawe
Hi!

Du könntest z.B. dem (wie Du sagst) Modul sagen, wer es aufgerufen hat:

Code: Alles auswählen

# Datei: A.py
from B import B

class A:
	def __init__(self):
		b = B(self)
		
	def say_hello(self):
		print "hello from A"

A()

Code: Alles auswählen

# Datei: B.py
class B:
	def __init__(self, master):
		self.master = master
		self.master.say_hello()
Gruß, mawe

Verfasst: Dienstag 26. Oktober 2004, 10:56
von Gast
danke für den tipp... da hab ich glatt noch eine kleine frage.

man kann doch mit

Code: Alles auswählen

from x import y
bestimmte funktionen eines modules direkt importieren.
kann man die auch umbenennen um doppelte bezeichnungen zu vermeiden,
so wie

Code: Alles auswählen

from x import y as xy
, oder muss man dann den normalen weg gehen:

Code: Alles auswählen

import x
?

Verfasst: Dienstag 26. Oktober 2004, 11:12
von mawe
Hi!

Probiers doch einfach aus! :D

Code: Alles auswählen

# Datei: A.py
from B import B as C

class A:
    def __init__(self):
        b = C(self)
....
Sollte funktionieren. Wird recht häufig gemacht, um lange Namen abzukürzen. Man sieht sehr oft

Code: Alles auswählen

import Tkinter as tk
import Numeric as num
...
Gruß, mawe

Verfasst: Dienstag 26. Oktober 2004, 13:07
von pSy
und wie überprüfe ich ob der zurückgegebene wert wirklich ne instanz ist?

denn type gibt zwar <type 'instance'> zurück, aber der begriff instance ist nicht festgelegt, wie zB str, int, dict oder list.

gibts da möglichkeiten typen zuzuweisen?
das einzigste was bisher klappt ist

Code: Alles auswählen

if type(self) == type(instobj)
was aber irgendwie blöd ist, da ich erst ne klasse brauche um so ein objekt zu bekommen.

Verfasst: Dienstag 26. Oktober 2004, 13:57
von Milan
Hi, dafür gibt es das Modul types:

Code: Alles auswählen

import types
class A:
    pass
print types.InstanceType == type(A())

Verfasst: Dienstag 26. Oktober 2004, 14:06
von pSy
ah, wunderbar... jetzt haben sich erstmal die meisten fragen geklärt.

danke für die hilfe...

Verfasst: Dienstag 26. Oktober 2004, 14:41
von Dookie
Hi pSy,

Typeüberprüfungen kannst Du auch mit der eingebauten Funktion isinstance(obj, class-or-type-or-tuple) machen.

Code: Alles auswählen

class A(object):
    pass

a = A()
print "isinstance(a, A) -> %s" % str(isinstance(a, A))
print "isinstance(a, tuple) -> %s" % str(isinstance(a, tuple))
print "isinstance(a, object) -> %s" % str(isinstance(a, object))
isinstance prüft ob das objekt vom angegebenen Typ ist oder die Klasse des Objekts vom angegebenen Typ abgeleitet wurde. Es kann auch ein Tuple mit mehreren Typen/Classen übergeben werden z.B. isinstance(a, (A, B, C))


Gruß

Dookie