2017-10-18 6 views
1

私はまだ初心者で、私が知りたいと思っていることを私は知りたくない簡潔な方法で。タートルとタートルとの違いタートル()とx = turtle.Turtle()

基本的には、私の質問は、私はちょうどturtle.Turtle()関数を使用し、上記の関数に変数を割り当てることの違いは何かを理解するのに役立つことができますか?それをテストすると、turtle.Turtle()を使用すると、それだけで新しいカメオブジェクトが作成されます。たとえば:

import turtle 
turtle.Turtle().forward(90) 
turtle.Turtle().left(90) 

上記のコードでは、2つのカメのオブジェクト、90と90度左に同じ場所に留まってターン1で前進するものを作成します。

import turtle 
bob = turtle.Turtle() 
bob.forward(90) 
bob.left(90) 

上記のコードは、オブジェクトTurtleを作成し、それを変数bobに割り当てます。その後、オブジェクトを90だけ前方に移動させ、次に90度左に回転します。 bobが本質的にturtle.Turtle()である場合、 "bob"が使用されるたびにTurtleオブジェクトの別のインスタンスが作成されないのはなぜですか?

ありがとうございます!

答えて

0

要するに、turtle.Turtle()は、クラスTurtleのコンストラクタメソッドです。クラスのインスタンスを返します。出力を変数に代入しないと、基本的にはのすぐにのインスタンスが作成されます(その呼び出しの直後に特別なPython変数_でまだアクセスできます)。 turtle.Turtle().forward(90)には、すぐ後で "turtle.Turtle()"の後に作成されるクラスの暗黙のインスタンスがあり、その暗黙のインスタンスに対してメソッドforward()が呼び出されます。しかし、その暗黙のインスタンスへの参照はないので、最終的にはPythonのガベージコレクタによって破棄されます。

bob = turtle.Turtle()を呼び出すと、基本的に作成されたインスタンス(参照番号bob)への参照が保持されます。変数bobを使用して、同じインスタンスにアクセスし続けることができます。

Turtle.forward()の実装を提供していないため、forward()によって返されるものはわかりません。何も返さない(つまり、Noneを返します)、何らかの任意の値を返す可能性がありますまたはインスタンス自体を返す可能性があります。後者の場合、bob = turtle.Turtle().forward(90)のようなものを実行することができます。これは本質的にはbob = turtle.Turtle(); bob.forward(90)と同じです。私はそこに残す。より良い、より完全な答えを得るためには、おそらく[OOP](オブジェクト指向プログラミング)について読んでみるべきでしょう(おそらく参照を深めてみることをお勧めします)。

+0

ああ、私は今、何が起こっているのか理解していると思います。変数bobを作成し、それをインスタンスturtle.Turtle()に割り当てることによって、変数bobにインスタンスを保存しています。私は初心者なので、私が=トークンを考えていた方法は、それの数学的バージョンに似ていました。私はその考え方をはっきりととどめようとしますが、私が練習を続けていくうちに、それはもっと自然に来ると思います。複雑すぎるような質問への簡単な答え!私にそれを明らかにしてくれてありがとう! –

+0

それは、あなたが言語を初めて使う人にとっては重要な違いです。 Python(および他の多くの言語)では、単一の '= 'が代入演算子です。右側の値は、左側の変数に割り当てられます。二重等号( '==')は比較演算子で、左右が等しければTrueを返し、そうでなければFalseを返します。 – jorgeh

関連する問題