44554


以前作ったクラスに新しくメソッドを追加したいのですが上手くいきません。  
目的は新しくdraw_barというメソッドをつかってグラフを書きたいと考えています。

［以前作ったもの］

[code]

    import turtle
    
    class Kame(turtle.Turtle):
        def __init__(self):
            super().__init__()
            self.shape("turtle")
            self.shapesize(2,2)
    
[/code]

［追加したいメソッド］

[code]

    def draw_bar(self,height,width=40):
        self.left(90)
        self.fd(height)
        self.right(90)
        self.fd(width)
        self.right(90)
        self.fd(height)
        self.left(90)
    
[/code]

［ターミナルでの実行コード］

[code]

    import kame
    >>> hist_kame=kame.Kame()
    >>> hist_kame.draw_bar(120)
    
[/code]

［エラー］  
AttributeError: 'Kame' object has no attribute 'draw_bar'

どうぞよろしくお願いいたします。


CC BY-SA 4.0
2018-06-06T02:11:19.753
44547
2018-06-06T04:27:50.163
2018-06-06T03:00:20.880
28620
28620
question
python python3
クラスにメソッドを追加したい

[code]

    import turtle
    
    class Kame(turtle.Turtle):
        def __init__(self):
            super().__init__()
            self.shape("turtle")
            self.shapesize(2,2)
    
        def draw_bar(self,height,width=40):
            self.left(90)
            self.fd(height)
            self.right(90)
            self.fd(width)
            self.right(90)
            self.fd(height)
            self.left(90)
    
[/code]

上のようにすべきとことろで、次のようにしているのではないでしょうか。

[code]

    import turtle
    
    class Kame(turtle.Turtle):
        def __init__(self):
            super().__init__()
            self.shape("turtle")
            self.shapesize(2,2)
    
    def draw_bar(self,height,width=40):
        self.left(90)
        self.fd(height)
        self.right(90)
        self.fd(width)
        self.right(90)
        self.fd(height)
        self.left(90)
    
[/code]

前者はクラス内に定義したメソッドなので、`hist_kame.draw_bar(120)`のように呼び出せますが、後者はクラスの外に定義した関数なので、それができないため、`AttributeError`がスローされたんだと思います。


CC BY-SA 4.0
2018-06-06T04:27:50.163
44554
2018-06-06T04:27:50.163
21092
44547
answer