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
OOP module hell
-
- User
- Beiträge: 670
- Registriert: Sonntag 15. Januar 2006, 18:42
- Wohnort: Celle
- Kontaktdaten:
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.
--- Heiko.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Mathias!movies1978 hat geschrieben:Gibt es gute ausführliche Tutorials zu diesem Thema?
http://python.org/doc/2.4.3/tut/node8.html
mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
-
- User
- Beiträge: 38
- Registriert: Donnerstag 2. Februar 2006, 11:27
- Wohnort: Bei Osnabrück
Also ich bin zwar auch noch nicht so lange dabei, aber wenn ich eine Klasse definiere sieht das folgendermassen aus:
Nun ja, so in etwas, zumindest die Basis.
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
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:
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.
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
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.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Falsch. Es kann auch eine leere __init__.py sein. Siehe [wiki]Modul_Import[/wiki].Buell hat geschrieben:eine __init__.py mit from modul import * drin
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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.Buell hat geschrieben:richtig, aber eine leere __init__.py dürfte wahrscheinlich einfach alles importieren
Aus Python-Tutorial, Kapitel 6.4 Packages zitiert:
Deswegen würde man es eher so machen (um das zu bekommen, was der OP wollte):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
- 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!
Code: Alles auswählen
from mytools import modul
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice