75363


テキストを見ながらPythonの勉強をしていたのですが、実行した際にエラーを吐いてしまいます。

正直なところ、`self` という存在がJavaでいう `this`
的なものであると認識しているのですが、いまいち理解できておりません。どなたかご教授の程お願いいたします。

**エラーメッセージ:**

[code]

    AttributeError: 'MyCoach' object has no attribute 'teach'
    
[/code]

**実行したコード:**

[code]

    class MyCoach:
        def __init__(self, max):
            self.max = 5
            self.count = 0
    
    def teach(self):
        if self.count < self.max:#maxで規定した値より小さければもっと強く！、規定値に達していればよしオッケーだと表示
            print("もっと強く！")
        else:
            print("よしオッケーだ！")
    
        self.count += 1#ここでcount変数をインクリメントする
    
    
    mc = MyCoach(5)#ここでインスタンス化?
    for i in range(6):
        print("頑張れ")
        mc.teach()#MyCoachのteachメソッドを呼び出したい
    
[/code]


CC BY-SA 4.0
2021-04-18T09:27:25.700
75359
2021-04-18T16:24:36.057
2021-04-18T16:24:36.057
3060
41971
question
python python3
クラスのメソッドの使い方がわかりません


`teach`がMyCoachのメソッドとして宣言されていません。  
Pythonではインデントがとても重要です。

Pythonでは、あるクラスのメソッドとして関数を定義するためには、そのクラスより内側のインデントをして、メソッドを定義する必要があります。

あなたの例では `def
teach():`の宣言がクラスの内側ではなくクラスと同じ階層にあるためメソッドとしてではなくグローバルな関数として認識されてしまっています。  
そのためクラスの内側でteachを宣言すればよいです。

修正例:  
(teachメソッドのインデントの階層が変わっています)

[code]

    class MyCoach:
        def __init__(self, max):
            self.max = 5
            self.count = 0
    
    
        def teach(self): #この関数のインデントをclassより内側にする
            if self.count < self.max:#maxで規定した値より小さければもっと強く！、規定値に達していればよしオッケーだと表示
                print("もっと強く！")
            else:
                print("よしオッケーだ！")
    
            self.count += 1#ここでcount変数をインクリメントする
    
    mc = MyCoach(5)#ここでインスタンス化?
    for i in range(6):
        print("頑張れ")
        mc.teach()#MyCoachのteachメソッドを呼び出したい
    
[/code]


CC BY-SA 4.0
2021-04-18T13:07:35.437
75363
2021-04-18T13:07:35.437
5246
75359
answer