質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

6804閲覧

【pythin3】__int__の使い方について質問です

uc200

総合スコア32

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2017/10/12 14:48

現在『楽しいプログラミング pythonで始めよう』という本でpythonを勉強中です。その中で、classを使ったコードの例として、

python3

1class Animal: 2 def __int__(self,species,number_of_legs,color): 3 self.species=species 4 self.number_of_legs=number_of_legs 5 self.color=color 6 7harry=Animal("hippogriff",6,"pink") 8print(harry.species) 9

という例文がありました。しかし、この文をpython3.5のidle.exeで実行したところ、
TypeError: object() takes no parameters
とエラーが出ました。そこで、次のようにコードを書きなおしました。

python3

1 2import copy 3class Animal: 4 def __int__(self,species,number_of_legs,color): 5 self.species=species 6 self.number_of_legs=number_of_legs 7 self.color=color 8 9harry=Animal() 10harry.__int__("hippogriff",6,"pink") 11print(harry.species)

今度はエラーが起きませんでした。他のページでも同様のコードの書き方だったため、本が間違っているということはないと思います。最初のコードではなぜプログラムが動作しなかったのでしょうか。また、修正の方法としてもっとよい書き方はありますでしょうか。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

__int____init__の間違いだと思います。

タイポによってなんでそのようなエラーが起きるかは、次のページをご覧ください。
以前も同様の質問があったので。
エラーが返ってきます(udasityでのpythonの授業内容)原因が分かる方おしえていただけませんか?

リンク切れしたときのために、一応コピペしておきます。
引用の形式で書きますが、原文を書いたのも私です。

原因がわかりました。タイポです。
まず、同じエラーが出るコードを示します。

Python

1class MyClass(): 2 def _init_(arg): 3 pass

my_class = MyClass(1)

"""出力
Traceback (most recent call last):
File "hoge.py", line 5, in <module>
my_class = MyClass(1)
TypeError: object() takes no parameters
"""

このエラーの原因は、__init__と書くべきところを、_init_と書いていることです。


もう少し具体的にお話しします。
Pythonの全てのクラスは、[object](https://docs.python.jp/3/library/functions.html? highlight=object#object)を継承しています。

よって、次のように、一見空っぽなクラスを作っても...

Python

1def EmptyClass(): 2 pass

print(dir(EmptyClass))

"""出力
['annotations', 'call', 'class', 'closure', 'code', 'defaults', 'delattr', 'dict', 'dir', 'doc', 'eq', 'format', 'ge',

'get', 'getattribute', 'globals', 'gt', 'hash', 'init', 'init_subclass', 'kwdefaults', 'le', 'lt', 'module', 'name', 'ne', 'new', 'qualname', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook']

"""

...このように、数多くのメソッドを持ちます。
ですので、必須のメソッドである__init__をタイポしても、自動的に実装されてしまうのです。

ここで、先ほどのエラーをもう一回見てみましょう。
TypeError: object() takes no parameters 『objectは引数を取らないよ』
確かに直接的な原因を指摘しているエラーメッセージだったんですね。

投稿2017/10/12 14:49

編集2017/10/12 14:58
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uc200

2017/10/12 15:30

initでしたか しょうもない間違いですみません(笑) 詳しい回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問