Seite 1 von 1
OOP module hell
Verfasst: Dienstag 18. April 2006, 10:19
von movies1978
Hallo,
ich habe module geschrieben in dem eine Klasse ist.
modul.py
in der steht
class xyz:
__init__(xyz):
.
.
.
wenn ich nun
from .. import modul
mache und versuche eine Objekt zu instanzieren, dann sagt er mir
AttributeError: module '...module' has no attribute 'xyz'
Gibt es gute ausführliche Tutorials zu diesem Thema?
Mfg
Mathias
Verfasst: Dienstag 18. April 2006, 10:41
von modelnine
Dein Problem ist massiv unterspezifiziert. Da Du from ... import modul benutzt, gehe ich davon aus, dass Deine modul.py in einem Package liegt, und deswegen sollte das, was Du probierst, eigentlich ohne Probleme tun, außer Du hast einen Namenskonflikt mit einem eigebauten Modul. Bitte poste etwas eindeutigeren und aussagekräftigeren Code.
Re: OOP module hell
Verfasst: Dienstag 18. April 2006, 10:42
von gerold
movies1978 hat geschrieben:Gibt es gute ausführliche Tutorials zu diesem Thema?
Hi Mathias!
http://python.org/doc/2.4.3/tut/node8.html
mfg
Gerold

Verfasst: Dienstag 18. April 2006, 10:45
von prof_weirdo
Also ich bin zwar auch noch nicht so lange dabei, aber wenn ich eine Klasse definiere sieht das folgendermassen aus:
Code: Alles auswählen
class Irgendwas(möglicheOberklasse):
Klassenattribut = Definition
def __init__(self, Anzahl übergebener Attribute):
# und hier werden dann die Objektattribute mit nem Wert belegt
# danach kommen dann die Methodendefinitionen
Nun ja, so in etwas, zumindest die Basis.
Verfasst: Dienstag 18. April 2006, 15:56
von Buell
Die Lösung des Problemes liegt doch schon in der Fehlermeldung:
AttributeError: module '...module' has no attribute 'xyz'
die richtige Syntax heißt für deine Fall:
Code: Alles auswählen
from modul import xyz
#oder
from modul import *
#oder
import modul
Python denkt modul wäre die Klasse und sucht nun nach einem Attribut/Methode/Variable xyz in dieses Klasse. Da modul.py nun nicht die Klasse sondern das Modul eben ist kommt die obige Fehlermeldung. du könntest genauso schreiben from dosenkohl import trallala, würde die gleiche Fehlermeldung kommen.
PS: wenn modul.py in einem Unterverzeichnis liegen sollte, brauchst du noch in diesem Unterverzeichnis eine __init__.py mit from modul import * drin und in deinem "aufrufenden" Modul musst du hinter from den Namen des Unterverzeichnisses angeben.
Verfasst: Dienstag 18. April 2006, 16:01
von Leonidas
Buell hat geschrieben:eine __init__.py mit from modul import * drin
Falsch. Es kann auch eine leere __init__.py sein. Siehe [wiki]Modul_Import[/wiki].
Verfasst: Dienstag 18. April 2006, 19:38
von Buell
@leonidas
richtig, aber eine leere __init__.py dürfte wahrscheinlich einfach alles importieren und das sollte wohl in den seltensten Fällen gewollt sein.
Verfasst: Dienstag 18. April 2006, 20:41
von Leonidas
Buell hat geschrieben:richtig, aber eine leere __init__.py dürfte wahrscheinlich einfach alles importieren
Nein, eine leere __init__.py tut genau das was in ihr drin steht: gar nichts. Sie wird nur gebraucht, um dem Interpreter anzuzeigen, dass das Verzeichnis, in dem sie drin ist, ein Package sein soll.
Aus Python-Tutorial, Kapitel
6.4 Packages zitiert:
Python Tutorial hat geschrieben:In the simplest case, __init__.py can just be an empty file, but it can also execute initialization code for the package
Deswegen würde man es eher so machen (um das zu bekommen, was der OP wollte):
- einen Ordner, nennen wir ihn mal mytools erstellen
- in diesen Ordner die Datei modul.py legen
- in ebendiesem Ordner auch eine leere Datei __init__.py erstellen. touch __init__.py ist genau richtig.
- Python-Interpreter im Ordner in dem der Ordner mytools drin ist anwerfen
- et voila!
Verfasst: Mittwoch 19. April 2006, 13:18
von Buell
... man lernt nie aus...