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

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

新規登録して質問してみよう
ただいま回答率
86.02%
オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

Class 子クラスで親クラスのプロパティを定義する方法

catwalk
catwalk

総合スコア10

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0グッド

0クリップ

248閲覧

投稿2022/11/13 11:47

実現したいこと

Pyhtonでクラスの勉強がてらにポケモンを作っているのですが、子クラスにて親クラスのプロパティの定義のやり方がわかりません。

「pokemon_category」を子クラスにて"イーブイ"と定義したいのですが、superの使い方が違うようで引数が足りないとエラーになります。
どのように修正すれば親クラスのプロパティを子クラスにて定義し、インスタンスできるのかをご教授いただければと思います。

また厚かましいお願いになりますが、参考サイトなどあれば合わせて教えていただけると助かります。

該当のソースコード

Python

1class pokemon: 2 3 #初期化 4 def __init__(self,name, pokemon_category, category, attribute, height, weight, propertys, hp, attack, defense, special_attack, special_defense, rapidity, skil1, skil2, skil3, skil4): 5 6 #名前 7 self.name = name 8 9 #ポケモンの種類 10 self.pokemon_category = pokemon_category 11 12 #分類 13 self.category = category 14 15 #属性 16 self.attribute = attribute 17 18 #高さ 19 self.height = height 20 21 #重さ 22 self.weight = weight 23 24 #特性 25 self.propertys = propertys 26 27 #HP 28 self.hp = hp 29 30 #こうげき 31 self.attack = attack 32 33 #ぼうぎょう 34 self.defense = defense 35 36 #とくこう 37 self.special_attack = special_attack 38 39 #とくぼう 40 self.special_defense = special_defense 41 42 #すばやさ 43 self.rapidity = rapidity 44 45 #技1 46 self.skil1 = skil1 47 48 #技2 49 self.skil2 = skil2 50 51 #技3 52 self.skil3 = skil3 53 54 #技4 55 self.skil4 = skil4 56 57 #わざ1 58 def attack1(self): 59 print("{0}の{1}!",format(self.name,self.skil1)) 60 61 #わざ2 62 def attack2(self): 63 print("{0}の{1}!",format(self.name,self.skil2)) 64 65 #わざ3 66 def attack3(self): 67 print("{0}の{1}!",format(self.name,self.skil3)) 68 69 #わざ4 70 def attack4(self): 71 print("{0}の{1}!",format(self.name,self.skil4)) 72 73 74#子クラス 75class eevee(pokemon): 76 def __init__(self, name, category, attribute, height, weight, propertys, hp, attack, defense, special_attack, special_defense, rapidity, skil1, skil2, skil3, skil4): 77 super().__init__(name, pokemon_category, category, attribute, height, weight, propertys, hp, attack, defense, special_attack, special_defense, rapidity, skil1, skil2, skil3, skil4) 78 self.pokemon_category = "イーブイ" 79 80 81 82 83eve = eevee("ブイ太郎","進化ポケモン","ノーマル","0.3m","6.5kg","にげあし",4,4,3,3,4,4,"たいあたり","でんこうせっか","あなをほる","にどげり") 84print(eve.pokemon_category) 85

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

somak

2022/11/13 12:04

子クラスの__init__の仮引数にpokemon_categoryがないからでは?
BeatStar

2022/11/13 22:43

とりあえず、『エラーメッセージは省略せずに提示しましょう』です。 エラーメッセージはインタプリタ等からのメッセージです。 メッセージにヒントが隠されています。なので省略しないでください。

回答1

1

ベストアンサー

「pokemon_category」を子クラスにて"イーブイ"と定義したい

1.子クラスの __init__ 内で pokemon_category の内容を指定し、それを親クラスの __init__ の pokemon_category に渡します。

python

12#子クラス 3class eevee(pokemon): 4 def __init__(self, name, category, attribute, height, weight, propertys, hp, attack, defense, special_attack, special_defense, rapidity, skil1, skil2, skil3, skil4): 5 pokemon_category = "イーブイ" 6 super().__init__(name, pokemon_category, category, attribute, height, weight, propertys, hp, attack, defense, special_attack, special_defense, rapidity, skil1, skil2, skil3, skil4) 7 8

※ または、pokemon_category をクラス変数として定義する方法もあるかもしれませんが、pokemon_categoryが各クラスごとに共通であるのかどうか、また、継承元の pokemon クラスで pokemon_category の値はどうあるべきなのかが質問には一切記載されていないため、割愛します

投稿2022/11/13 12:00

編集2022/11/13 12:19
qnoir

総合スコア7910

BeatStar👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。