2017-04-04 2 views
2

Ich bin neu in Python und ich versuche, ein Modul und eine Klasse zu erstellen.Python-Modul und Klasse - AttributeError: Modul hat kein Attribut

Wenn ich versuche, mystuff zu importieren und dann cfcpiano = mystuff.Piano() verwenden, erhalte ich eine Fehlermeldung:

AttributeError: module 'mystuff' has no attribute 'Piano' 

Wenn ich von mystuff import Piano versuche ich bekommen:

ImportError: cannot import name 'Piano' 

Kann jemand erklären, was los ist? Wie verwende ich ein Modul und Klasse in Python

mystuff.py

def printhello(): 
    print ("hello") 

def timesfour(input): 
    print (input * 4) 


class Piano: 
    def __init__(self): 
     self.type = raw_input("What type of piano? ") 

    def printdetails(self): 
     print (self.type, "piano, " + self.age) 

Test.py

import mystuff 
from mystuff import Piano 
cfcpiano = mystuff.Piano() 
cfcpiano.printdetails() 
+0

Haben Sie eine '__init __. Py' Datei im' mystuff' Verzeichnis? –

+0

Können wir Ihre komplette Dateihierarchie sehen? –

+0

'Test.py' und' mystuff.py' müssen sich im selben Ordner befinden, damit der Code so funktioniert wie er ist. –

Antwort

0

Ich verstehe Sie nicht verstehen, warum es nicht funktioniert. Es funktioniert auf meinem Computer. Haben Sie eine andere mystuff.py-Datei? In diesem Fall könnte die andere Datei anstelle der gewünschten Datei geladen werden? Probieren Sie print dir (mystuff) aus, um zu sehen, welche Methoden verfügbar sind.

+0

Ich komme von einem C# Hintergrund, vielleicht, weil ich daran gewöhnt bin, aber eine Klasse mit Eigenschaften zu erstellen scheint nicht zu kompliziert oder vielleicht ist es. Ich weiß sehr wenig über Python, aber mein Ziel ist es, Objekte zu erstellen und sie wie in C# zu verwenden. – Earl

1

Wenn Sie ein Python-Modul erstellen möchten namens mystuff

  1. Erstellen Sie einen Ordner mit dem Namen mystuff
  2. schaffen eine __init__.py Datei
    #__init__.py from mystuff import Piano #import the class from file mystuff from mystuff import timesfour,printhello #Import the methods

  3. Kopieren Sie Ihre Klasse mystuff.py in den Ordner mystuff

  4. Erstellen Sie die Datei test.py außerhalb des Ordners (Modul) mystuff. #test.py from mystuff import Piano cfcpiano = Piano() cfcpiano.printdetails()

Dies wird funktionieren.

+0

'mystuff.py' ist keine Klasse, sondern eine Moule. Was Sie beschrieben haben (der Ordner mit '__init __. Py' innerhalb) ist kein Modul, sondern ein Paket. Sie benötigen das nicht, um ein Python-Modul zu erstellen. – Goyo

+0

Danke, ich habe den Ordner ausprobiert, aber das Modul konnte nicht gefunden werden. Ich lege alle Codepages ohne Init-Seite unter ein Projekt und es scheint zu funktionieren. Zwei Fragen, wie wird die Init-Seite ausgelöst? Es scheint, Selbstdatencode zu cachen - zB. Wenn ich die Frage zu Was ist das Alter des Klaviers? das kommt nicht auf, wie setzt man das zurück? Danke für die Hilfe Jungs. – Earl

Verwandte Themen