3

私は本「コンピューター科学者のように考える方法」に従ってPythonを学び、クラスとオブジェクトの章を理解するのに問題があります。

そこでの演習では、Rectangle と dx& dy という名前の 2 つのパラメーターを受け取る moveRect という名前の関数を作成するように指示されています。コーナーの x 座標に dx を追加し、コーナーの y 座標に dy を追加して、長方形の位置を変更する必要があります。

今、私が書いたコードが正しいかどうかはよくわかりません。それで、私が何をしようとしていたかをお話ししましょう。私がそれを正しく行っていたかどうか教えていただけますか?

最初にクラス Rectangle を作成し、次にそのインスタンスを作成して、座標 x と y の値、長方形の幅と高さなどの詳細を入力しました。

だから、これは以前の私のコードでした:

class Rectangle:
    pass
rect=Rectangle()
rect.x=3.0
rect.y=4.0
rect.width=50
rect.height=120

def moveRect(Rectangle,dx,dy):
    Rectangle.x=Rectangle.x + dx
    Rectangle.y=Rectangle.y + dy

dx=raw_input("enter dx value:")
dy=raw_input("enter dy value:")

moveRect(Rectangle,dx,dy)

しかし、このコードを実行すると、属性エラーが発生し、クラス Rectangle には属性 x がありません

したがって、次の行を moveRect 関数に移動しました

rect=Rectangle()
rect.x=3.0
rect.y=4.0
rect.width=50
rect.height=120

したがって、コードは次のようになりました。

class Rectangle:
    pass


def moveRect(Rectangle,dx,dy):
    Rectangle.x=Rectangle.x + dx
    Rectangle.y=Rectangle.y + dy
    rect=Rectangle()
    rect.x=3.0
    rect.y=4.0
    rect.width=50
    rect.height=120


dx=raw_input("enter dx value:")
dy=raw_input("enter dy value:")

moveRect(Rectangle,dx,dy)

しかし、このコードではまだエラーが発生します。では、このコードの実際の何が問題なのですか? 現時点では、試行錯誤しながらこのコードを書いて、エラーが発生したときにその部分を変更したような気がします。これがどのように機能するかを正しく理解したいので、これに光を当ててください。

本「コンピューター科学者のように考える方法」の第 12 章で init が紹介されていないため、init を使用せずに行う必要があります。

4

4 に答える 4

2

クラス宣言で、アクセスして使用するメンバーとメソッドを指定する必要があります。クラス内では、現在作業中のインスタンスが名前で参照されますself(以下のリンクを参照してください!):

class Rectangle:
   def __init__(self):
       self.x = 0
       self.y = 0
       self.width = 50
       self.height = 30

   # may I recommend to make the moveRect function
   # a method of Rectangle, like so:
   def move(self, dx, dy):
       self.x += dx
       self.y += dy

次に、クラスをインスタンス化し、返されたオブジェクトを使用します。

 r = Rectangle()
 r.x = 5
 r.y = 10
 r.width = 50
 r.height = 10
 r.move(25, 10)

それが役立つことを願っています。

読む: http://www.diveintopython.net/object_directional_framework/defining_classes.html

于 2013-07-02T08:12:28.267 に答える