2017-09-11 40 views
1

我寫了一個類,其中有一個函數接受*args的幾個輸入,但運行結果證明它只接受來自第二個參數的參數,就好像self取第一個參數一樣,這裏是簡化代碼:class無法正確處理* args

class incorrect(): 
    def itera(self, *args): 
     for i in args: 
      print(i) 

a = incorrect 
a.itera(12, 23, 34) 

和輸出,12丟失:

23 
34 

問題是什麼?我該如何解決這個問題?

+0

這些答案是如何有這麼多upvotes的問題是一個公然的主題錯字? –

+1

因爲在答案發布之前沒有人發現重複? :) – MSeifert

+0

@ MSeifert這不是一個重複的...它只是一個錯字 –

回答

6

這是因爲你在課堂上使用它,所以self12args[33, 34]。您可以通過創建一個實例修復:

a = incorrect() 
a.itera(12, 23, 34) 

或者你可以省略簽名和使用裝飾@staticmethodself

@staticmethod 
def itera(*args): 
    for i in args: 
     print(i) 

或者你可以把它classmethod

@classmethod 
def itera(cls, *args): 
    for i in args: 
     print(i) 
+0

我沒有downvoted但你可以'打印(個體經營)'裏面的功能以「證明」你的說法,也許還詳細闡述*爲何*'自= 12'如果你調用它的類:) – MSeifert

+0

我想這是不是最好的* *解釋你可以提供。但無論如何這是正確的。 –

+0

相反省略'self'的(不這樣做,你會如果你調用它的實例有類似的問題),使它成爲一個'@ staticmethod'。 – MSeifert

5

你正在調用類本身的方法,而不是類的一個實例。創建一個實例,然後調用它的方法:

a = incorrect() # Add() to create instance 
a.itera(12, 23, 34) 

當你調用它的類本身,它作爲一個靜態方法,並self不再是隱式傳遞,因爲有沒有self傳遞。