[英]passing in self data in python
您能否澄清一下self.add(x)
下面的工作方式與self.data.append(x)
的工作方式相同嗎? 也就是說, self.add(x)
怎么知道 append 到列表中,因為我們沒有明確聲明self.data.add(x)
? 當我們 state y.addtwice('cat')
時,將'cat'
添加到'self'
,而不是self.data
。
class Bag:
def __init__(self):
self.data=[]
def add(self,x):
self.data.append(x)
return self.data
def addtwice(self,x):
self.add(x)
self.add(x)
return self.data
>>> y = Bag()
>>> y.add('dog')
['dog']
>>> y.addtwice('cat')
['dog', 'cat', 'cat']
因為addtwice
調用定義在 self 上的方法,並且因為 self.data 是“可變類型”,所以 addtwice 對 add 的調用最終會附加 self.data 的值。 add
,依次調用 self.data.append
在計算機程序中調用 function 時,您可以將過程視為一系列替換,如下所示:
# -> means (substitution for)
# <= means "return"
y = Bag()
y.add('dog') ->
y.data.append(x) ->
#(machine code)
<= y.data
# at this point, at the command propmt, python will just print what was returned.
y.addtwice('cat')->
y.add('cat')->
y.data.append(x) ->
#(machine code)
<= y.data
#nothing cares about this return
y.add('cat')->
y.data.append(x) ->
#(machine code)
<= y.data
#nothing cares about this return either
<= y.data
# at this point, at the command propmt, python will just print what was returned.
不過,在任何這些情況下, self
本身從未真正附加過。 self.data
是。
self.add(x)
調用實例方法add
反過來調用self.data.append(x)
當我們 state y.addtwice('cat') 時,'cat' 被添加到 'self',而不是 self.data
這是不正確的。 cat
實際上已添加到self.data
中。 為什么你會認為它被添加到self
?
y.add('dog')
與Bag.add(y, 'dog')
相同。 所以add
確實是在做y.data.append('dog')
,習慣上用self
這個名字代替。
y.addtwice('cat')
與Bag.addtwice(y, 'cat')
相同。 所以addtwice
真的是做y.add('cat')
兩次,這和做Bag.add(y, 'cat')
兩次是一樣的。 所以addtwice
實際上是在做y.data.append('cat')
兩次。
每個實例方法中的self
只是一個自動添加的變量,指向調用它的實例,在本例中為y
。
讓我們看看 class 包中的 function add(self, x)
。
當調用那個function時,其中一個參數是self,也就是object本身,在這種情況下,調用的是add
function的同一個Bag
實例。
因此,在 function add
中,調用self.data.append(x)
基本上就是調用 function append 到Bag
的data
列表中的元素x
。
同樣的事情 function addtwice
。 通過調用 function add
兩次,將兩個元素添加到 Bag 的data
列表中。
這兩個函數都返回data
列表。
add(self, x)
只是您要調用的 function 。
append
是一個內置的 function 向列表中添加一個元素。
所以你添加 function 基本上使用 append 將你想要的元素添加到列表中並返回你命名的列表data
self.addtwice
將調用 self.add 兩次,因此將添加元素兩次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.