簡體   English   中英

python類屬性作為類方法中的標准輸入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM