2017-04-04 99 views
2

我是新来的python,我试图创建一个模块和类。Python模块和类 - AttributeError:模块没有属性

如果我尝试导入mystuff然后用cfcpiano = mystuff.Piano(),我得到一个错误:

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

如果我从mystuff import Piano尝试,我得到:

ImportError: cannot import name 'Piano' 

有人能解释这是怎么回事?如何使用模块和类在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

你在'mystuff'目录下有'__init __。py'文件吗? –

+0

我们能否看到您的完整文件层次结构? –

+0

'Test.py'和'mystuff.py'必须位于同一个文件夹中,才能使代码保持原样。 –

回答

0

我明白你不明白为什么这是行不通的。它适用于我的电脑。在这种情况下,你是否有另一个mystuff.py文件可能会加载另一个文件而不是你想要的文件?尝试打印目录(mystuff)来查看可用的方法。

+0

我来自C#背景,也许是因为我习惯了它,但创建一个带有属性的类似乎不是太复杂,或者它可能是。我对Python知之甚少,但我最终的目标是创建对象并像我在C#中一样使用它们。 – Earl

1

如果你想创建一个名为mystuff

  1. 与名称创建一个文件夹一个Python模块mystuff
  2. 创建一个__init__.py文件
    #__init__.py from mystuff import Piano #import the class from file mystuff from mystuff import timesfour,printhello #Import the methods

  3. mystuff.py类复制到文件夹mystuff

  4. 在文件夹(模块)mystuff以外创建文件test.py#test.py from mystuff import Piano cfcpiano = Piano() cfcpiano.printdetails()

这会奏效。

+0

'mystuff.py'不是一个类,而是一个moule。你所描述的(里面有'__init __。py'的文件夹)不是一个模块,而是一个包。你不需要创建一个python模块。 – Goyo

+0

谢谢,我试过这个文件夹,但它找不到这个模块。我把所有没有Init页面的代码页放在一个项目下,它似乎工作。有两个问题,init页面如何被解雇?它似乎缓存自己的数据代码 - 例如。如果我把问题改成钢琴的年龄是多少?这不出来,如何重置此?谢谢你们的帮助。 – Earl

相关问题