2012-02-20 98 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