[英]python class attributes as standard input in a class method
我無法做到這一點,但你可以做到這一點是有道理的。 所以我只是犯了一個錯誤。
class Foobar:
def __init__(self):
self.myatr = 0
def add(self, someinput=self.myatr): # <-- someinput=self.myatr???
return someinput += 1
但是你得到了錯誤
NameError: 名稱 'self' 未定義
但如果這是它的工作方式,那將是合乎邏輯的
f = Foobar()
f.add() # returns 1
f.add(1) # returns 2
實例方法是綁定到類屬性的函數,在定義類時定義,在任何實例存在之前。 類似地,默認值在定義時設置一次,而不是在沒有顯式參數的情況下調用方法時按需設置。
因此,您需要一個哨兵(通常為None
)來表示沒有傳遞任何參數。
def add(self, someinput=None):
if someinput is None:
someinput = self.myatr
return someinput + 1
默認參數在函數定義時計算。 此外,之前定義的參數名稱(如函數中的self
)在函數定義期間不可用。 所以當你提到self.myattr
,還沒有self
。
例如,考慮這個函數:
>>> def test(thing=print('hello')):
... ...
...
hello
>>>
表達式print('hello')
在函數定義時就被評估,當你調用test
時它不會被重新評估。
此外, return someinput += 1
也是一個錯誤,因為賦值不是一個表達式。
此外,整數總是被復制,所以如果你這樣做:
def test(x):
x += 1
return x
a = 6
test(a)
a
仍將等於 6,因為調用test(a)
復制a
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.