60902


こんにちは！最近Pythonを学び始めた者です。参考書に載っている「orangeオブジェクトに腐る性質を追加するコード」を、載っている通りに書いているのですが、エラーが出てしまいます。  
お力を貸していただけるとありがたいです。以下がそのコードです。

[code]

    class Orange:
        def __init__(self, w, c):
            self.weight = w
            self.color = c
            self.mold = 0
            print("Created!")
    
        def rot(self, days, temp):
            self.mold = days * temp
    
    orange = Orange(200, "orange")
    print(orange.mold)
    orange.rot(10, 37)
    print(orange.mold)
    
[/code]

表示されたエラー

[code]

    Traceback (most recent call last):
      File "<pyshell#114>", line 1, in <module>
        orange.rot(10, 37)
    AttributeError: 'Orange' object has no attribute 'rot'
    
[/code]


CC BY-SA 4.0
2019-11-28T02:23:26.567
60899
2019-11-28T03:32:03.223
2019-11-28T02:31:41.263
3060
36669
question
python python-idle
orangeオブジェクトに腐る性質を追加するコードが書けません


単純に、`def __init__(self, w, c):`と`def rot(self, days,
temp):`の間の空行が、改行コードだけだからでしょう。  
ここには4桁の空白文字を入れてから改行する必要があります。

4桁の空白文字の無い改行だと、`class Orange:`の定義がそこで終わってしまったものとみなされて、`class Orange:`と`def
rot(self, days, temp):`は無関係な状態になります。

だいたい、質問のエラー以前にも、以下の様なエラーが発生しているはずなんですが。  
IDLEでファイルを実行するのと、インタプリタに直接コードを入力するのとでは違うのでしょうかね。  
以下は素のPythonを起動して入力した結果です。

[code]

    >>> class Orange:
    ...     def __init__(self, w, c):
    ...         self.weight = w
    ...         self.color = c
    ...         self.mold = 0
    ...         print("Created!")
    ...
    >>>     def rot(self, days, temp):
      File "<stdin>", line 1
        def rot(self, days, temp):
        ^
    IndentationError: unexpected indent
    >>>         self.mold = days * temp
      File "<stdin>", line 1
        self.mold = days * temp
        ^
    IndentationError: unexpected indent
    >>>
    >>> orange = Orange(200, "orange")
    Created!
    >>> print(orange.mold)
    0
    >>> orange.rot(10, 37)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'Orange' object has no attribute 'rot'
    
[/code]

空白を含めた改行にすれば、以下のようになります。

[code]

    >>> class Orange:
    ...     def __init__(self, w, c):
    ...         self.weight = w
    ...         self.color = c
    ...         self.mold = 0
    ...         print("Created!")
    ...
    ...     def rot(self, days, temp):
    ...         self.mold = days * temp
    ...
    >>> orange = Orange(200, "orange")
    Created!
    >>> print(orange.mold)
    0
    >>> orange.rot(10, 37)
    >>> print(orange.mold)
    370
    >>>
    
[/code]


CC BY-SA 4.0
2019-11-28T03:00:17.920
60902
2019-11-28T03:32:03.223
2019-11-28T03:32:03.223
26370
26370
60899
answer


私の手元でそのコードを実行してみましたが、エラーにはなりませんでした。

エラーがでたファイルが`<pyshell#114>` とのことですが、後から `def rot(...)`
メソッドを追加して、orangeのインスタンスを作り直していない、ということはないでしょうか？

`orange.py` 等のファイルにコードを書いて実行してみてください。


CC BY-SA 4.0
2019-11-28T03:00:55.243
60903
2019-11-28T03:00:55.243
806
60899
answer