2014-03-03 39 views
2

我一直在使用Python 3.3.1編寫「絕對初學者Python」一書。__init __()得到了一個意想不到的關鍵字參數'text'

我想使用下面的代碼將文本添加到屏幕。我需要留在Python 3.3.1中,但我認爲這本書中的代碼是針對Python 2.X的。

from livewires import games, color 

class Pizza(games.Sprite): 
    """A falling pizza""" 
    def __init__(self, screen, x,y, image, dx, dy): 
     """Initialise pizza object""" 
     self.init_sprite(screen = screen, x = x, y = y, image = image, dx = dx, dy = dy) 

SCREEN_WIDTH = 640 
SCREEN_HEIGHT = 480 

#main 

my_screen = games.Screen(SCREEN_WIDTH, SCREEN_HEIGHT) 

wall_image = games.load_image("wall.jpg", transparent = False) 
pizza_image = games.load_image("pizza.jpg") 
my_screen.set_background(wall_image) 
games.Text(screen = my_screen, x = 500, y = 30, text = "Score: 1756521", size = 50, color = 

my_screen.mainloop() 

然而,當我運行這個程序,我得到一個錯誤(見下文)

games.Text(screen = my_screen, x = 500, y = 30, text = "Score: 1756521", size = 50, color = color.black) 
TypeError: __init__() got an unexpected keyword argument 'text' 

我希望你能幫助

+4

games.Text()正在創建一個對象,但定義此對象的類內的__init __()並不期望被稱爲文本的關鍵字參數,因此是例外。我建議你看看games.Text類中的__init __()。 – dannymilsom

回答

1

我有一個評論說,但我想我會詳細說明有完整的答案。

我只是看着爲livewires games.py模塊的源代碼,我建議

class Text(Object, ColourMixin): 
    """ 
    A class for representing text on the screen. 

    The reference point of a Text object is the centre of its bounding box. 
    """ 

    def __init__(self, screen, x, y, text, size, colour, static=0): 
     self.init_text (screen, x, y, text, size, colour, static) 
     ......... 

因此,大家可以看到,__init__()的文本類不指望一個名爲文本關鍵字參數。相反,它期望一系列的位置參數。

所以,你的代碼看起來應該是這樣

games.Text(my_screen, 500, 30, "Score: 1756521", 50, color.black) 

編輯:

正如2rs2ts指出,可以提供關鍵字參數位置參數,如果你指定所有參數名。但是,當您使用關鍵字顏色而不是顏色時,代碼失敗。所以下面也應該工作(但我會建議使用位置參數)

games.Text(screen=my_screen, x=500, y=30, text="Score: 1756521", size=50, colour=color.black) 

根據PEP8你也應該注意 - 「不要使用=號兩邊的空間用來表示一個關鍵字參數時,或默認參數值「。

+1

但是你可以爲位置參數提供關鍵字。在口譯人員身上嘗試一下。 'def foo(a,b,c):返回a + b + c',然後'foo(a = 1,b = 2,c = 3)'。 – 2rs2ts

+0

是的,這是真的。他的代碼實際上失敗了,因爲他將顏色拼錯爲顏色,因此使用關鍵字進行位置參數失敗。所以他可以將顏色更改爲顏色,或使用位置參數。我會根據這個更新我的回答 – dannymilsom

+0

我打算添加有關拼寫錯誤的註釋,但後來我發現當問題出現在「顏色」問題時,它不應該抱怨「文本」。 – 2rs2ts

相關問題