2012-02-20 34 views
4

因此,我正在通过在python中混淆类来熟悉面向对象编程。下面是一个简单的代码,我试着在解释器中实现。从单独的文件导入类

class Test(object): 

    def set_name(self, _name): 
     name = _name 

    def set_age(self, _age): 
     age = _age 

    def set_weight(self, _weight): 
     weight = _weight 

    def set_height(self, _height): 
     height = _height 

当我启动蟒蛇,我运行以下命令:

>>>import Test 
>>>Test.set_name("Sean") 

,然后我收到此回溯:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'set_name' 

我立足这一切离正式模块找到文档here

我已经阅读了很多关于面向对象的文档,但我还是很新的,所以我确信还有一些东西在我头上。那个错误是什么意思?

在此先感谢您的帮助。

回答

5

看起来像你正在导入模块Test。你在Test模块里有一个名为Test的课程吗?

如果是这样,您需要直接将该类导入为from Test import Test或者,如果您只想导入模块,则需要将您的类引用为Test.Test

编辑:关于unbound method set_name()错误。您需要在类实例上调用set_name方法,而不是直接在类上调用。 Test().set_name("Sean")将工作(请注意()Test创建实例)。

集名称方法需要类Test的实例作为第一个参数(self)。因此,如果在实例上未调用该方法,该方法将引发错误。通过显式提供实例作为第一个参数,可以直接从类中调用它。

+0

感谢您的快速回复!我想我对你的问题的答案不是很积极。我只是有一个名为Test.py的文件,并在该文件中是上面发布的代码。根据我上面链接到的模块文档,我想我确实在模块中有一个类。然而,当我更换'与进口Test''从测试进口Test',我得到这个错误: '回溯(最近通话最后一个): 文件“”,1号线,在 类型错误:不受约束的方法set_name ()必须用Test实例作为第一个参数调用(代替str实例)' – detroitwilly 2012-02-20 18:01:54

+0

@detroitwilly查看我的编辑 – 2012-02-20 18:19:28

+0

再次感谢您的快速回复!你的建议奏效了,我可以毫无错误地使用set_name()方法。 – detroitwilly 2012-02-20 18:29:05