Module und Klassen

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.
pSy
User
Beiträge: 44
Registriert: Montag 4. Oktober 2004, 17:58
Kontaktdaten:

Module und Klassen

Beitragvon pSy » Dienstag 26. Oktober 2004, 08:25

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
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Dienstag 26. Oktober 2004, 10:18

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
Gast

Beitragvon Gast » Dienstag 26. Oktober 2004, 10:56

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
?
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Dienstag 26. Oktober 2004, 11:12

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
pSy
User
Beiträge: 44
Registriert: Montag 4. Oktober 2004, 17:58
Kontaktdaten:

Beitragvon pSy » Dienstag 26. Oktober 2004, 13:07

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.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Dienstag 26. Oktober 2004, 13:57

Hi, dafür gibt es das Modul types:

Code: Alles auswählen

import types
class A:
    pass
print types.InstanceType == type(A())
pSy
User
Beiträge: 44
Registriert: Montag 4. Oktober 2004, 17:58
Kontaktdaten:

Beitragvon pSy » Dienstag 26. Oktober 2004, 14:06

ah, wunderbar... jetzt haben sich erstmal die meisten fragen geklärt.

danke für die hilfe...
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Dienstag 26. Oktober 2004, 14:41

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

Code: Alles auswählen

#!/usr/bin/env python
import this

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder