2015-12-02 80 views
0

我已經從一個引導複製一個Python代碼:懷疑的對象在Python代碼

class Carta: 

    ListaSemi=["Fiori","Quadri","Cuori","Picche"] 
    ListaRanghi=["impossibile","Asso","2","3","4","5","6",\ 
       "7","8","9","10","Jack","Regina","Re"] 

    def __init__(self, Seme=0, Rango=0): 
     self.Seme=Seme 
     self.Rango=Rango 

    def __str__(self): 
     return (self.ListaRanghi[self.Rango] + " di " + self.ListaSemi[self.Seme]) 

    def __cmp__(self, Altro): 
     #controlla il seme 
     if self.Seme > Altro.Seme: return 1 
     if self.Seme < Altro.Seme: return -1 

     #se i semi sono uguali controlla il rango 
     if self.Rango > Altro.Rango: return 1 
     if self.Rango < Altro.Rango: return -1 

     return 0 

當我從殼撥打:

>>> Carta1=Carta(1,11) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'module' object is not callable 

我使用Python版本2.7。 怎麼回事? 感謝

+4

你沒有顯示你輸入的內容;看起來像你已經導入模塊,而不是它內部的類。 –

+0

我複製了你的代碼,工作正常。將代碼保存在文件中,然後嘗試運行您的文件而不是python shell並將其作爲模塊導入。 –

回答

3

我假設片段上方保存爲Carta.py和您在交互shell跑:

>>> import Carta 
>>> Carta1=Carta(1,11) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'module' object is not callable 

這樣,你嘗試調用/實例化模塊,而不是裏面的類。你已經基本上兩個選項來解決這個問題,改變無論是進口或構造函數調用:

  • >>> from Carta import Carta 
    >>> Carta1=Carta(1,11) 
    
  • >>> import Carta 
    >>> Carta1=Carta.Carta(1,11) 
    

如果重命名或者模塊文件或類,這樣就可以區分他們更好,它變得清晰。

+1

另請參閱PEP008的[命名約定](https://www.python.org/dev/peps/pep-0008/#package-and-module-names)。因此,在這種情況下,它會建議一個模塊名稱爲'carta.py',並且類似於原始代碼 - Carta。 – SiHa