0

self.add(x)以下が同じように機能することを明確にしていただけますself.data.append(x)か?つまり、self.add(x)明示的に述べていないので、どのようにしてリストに追加するのかを知ることができself.data.add(x)ますか?と述べる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']
4

5 に答える 5

4

selfで定義されたメソッドを呼び出すためaddtwice、およびself.dataは「可変型」であるため、addtwiceのaddの呼び出しは、self.dataの値を追加することになります。add、次にself.data.appendを呼び出します

コンピュータプログラムで関数を呼び出す場合、プロセスは次のような一連の置換であると考えることができます。

# -> 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は。

于 2011-08-11T02:49:45.713 に答える
1

add(self, x)呼び出したい関数です。

appendリストに要素を追加する組み込み関数です。

したがって、add関数は基本的にappendを使用して、必要な要素をリストに追加し、名前を付けたリストを返します。data

self.addtwiceself.addを正確に2回呼び出すため、要素を2回追加します。

于 2011-08-11T02:52:24.217 に答える
1

self.add(x)インスタンスメソッドを呼び出し、次にインスタンスメソッドaddを呼び出しますself.data.append(x)

于 2011-08-11T02:46:57.633 に答える
1

y.addtwice('cat')と述べると、'cat'はself.dataではなく'self'に追加されます

これは正しくありません。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')には2回実行しています。これは、2回実行するのと同じBag.add(y, 'cat')です。だから本当に2回addtwiceやっています。y.data.append('cat')

selfin each instanceメソッドは、呼び出されたインスタンス(この場合は)を指す、自動的に追加された変数ですy

于 2011-08-11T02:51:13.487 に答える
1

add(self, x)クラスBagの関数を見てみましょう。

その関数が呼び出されると、パラメーターの1つはselfです。これはオブジェクト自体であり、この場合、Bagそのadd関数の同じインスタンスが呼び出されます。

したがって、関数ではadd、呼び出しself.data.append(x)は基本的にdataのリストで関数appendを呼び出すことでありBag、したがって、要素xをリストに追加します。

関数についても同じですaddtwice。関数を2回呼び出すことによりadd、2つの要素がdataBagのリストに追加されます。

どちらの関数もリストを返しdataます。

于 2011-08-11T02:51:52.053 に答える