2010-03-12 19 views
4

由於某種原因,我無法在__init____new__附近找到我的頭。我有一堆代碼在終端上運行良好,但是當我將它作爲Google快速搜索框的插件加載時,出現錯誤TypeError: default __new__ takes no parameters需要幫助瞭解python中的「TypeError:default __new__不帶參數」錯誤

我一直在閱讀有關錯誤,這是讓我的大腦旋轉。現在我有3班,沒有小班,每班有它自己的def s。我從來沒有使用或def __new__,但我已經得到了明顯的感覺,即這些功能(或缺乏),會給我的錯誤。

我不知道如何將代碼彙總到這裏會有幫助的代碼片段,因爲我有點頭大,但整個腳本可以在github找到。不期待任何人爲我修補我的代碼,我只是在我的智慧結束。使用__init__和一個簡單的(簡單的英文,而不是從我已經閱讀了20次,但仍然不能真正理解的python文檔引用)探討了爲什麼會出現這個錯誤,或者爲什麼我應該是,或者不是,以及/或__new__函數將被認真讚賞。

+0

嗨戈登。你真的需要削減問題。 github代碼甚至沒有__new__,並且依賴於一堆導入,並且依賴於一個特殊的API,並且和.... 我什至不能告訴你這個問題。 – 2010-03-12 01:39:17

回答

8

最簡單的方式重現您的問題:

>>> class Bah(object): pass 
... 
>>> x = Bah(23) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in ? 
TypeError: default __new__ takes no parameters 

所以它看起來像有一個在你的代碼的類(而不是從終端中運行的時候,但你做的非常不同的進口則),有沒有明確的__init__ ,並且你在某個地方用一些參數來調用這個類。在錯誤追溯中,您應該獲得調用發生的位置(如果不是這樣,例如由於GUI的細微之處,您可以使用try /除了所有內容外,並確保將traceback轉儲到except子句中的/ tmp文件,使用來自標準庫的模塊traceback)。

+0

謝謝。事實證明,谷歌快速搜索框正在調用'init',當它沒有在以前的版本。對不起,我的問題沒有格式化太好。 – 2010-03-13 03:13:33

2

有幾個基本的類構建概念,你似乎缺少。

__init__方法用於當類是第一個init ialized,並且是你如何設置它的內部。您還想要利用Python的new-style classes(Python 3中的默認值)。

我建議從Dive Into Python開始並從那裏分支。

+0

感謝您的幫助。我試圖理解這整個'__init__'和'__new__'的東西,但仍有一些東西對我來說沒有。我會再給Dive Into Python看一下。 – 2010-03-13 03:15:00