<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>オブジェクト指向 on Miura Computer Club</title>
    <link>/tags/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91/</link>
    <description>Recent content in オブジェクト指向 on Miura Computer Club</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja-JP</language>
    <lastBuildDate>Mon, 10 Aug 2026 09:00:00 +0900</lastBuildDate><atom:link href="/tags/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>レッスン119</title>
      <link>/lessons/lesson119/</link>
      <pubDate>Mon, 10 Aug 2026 09:00:00 +0900</pubDate>
      
      <guid>/lessons/lesson119/</guid>
      <description>クラス入門その２　クラスを使ってゲームを作ろう レッスン118で習ったクラスを使って、Pythonで簡単なゲームを作ってみましょう。 最初はとてもシンプルなゲームですが、徐々に機能を追加していきます。
作成するゲームはポケモンバトルゲームです。 3匹のポケモンが登場し、そのうち2匹が戦います。
必要な「クラス」はPokemonクラスとBattle（戦闘）クラスです。 Battle（戦闘）クラスはあらかじめ用意してあるので、Pokemonクラスを作成していきます。
作成するクラス Pokemonクラスを作成してください。 Pokemonクラスは以下のような仕組みを持っています。
コンストラクタ(__init__メソッド）
def __init__(self, name, hp, attack): ... というメソッドを定義します。
クラスからインスタンス（実体）を作成する時に呼ばれるメソッドを「コンストラクタ」と呼びます。 Pythonでは__init__(self, 引数)という名前のメソッドが「コンストラクタ」です。
以下の引数を設定し、属性(self.XXXXという変数）に設定します。
- name （ポケモンの名前、文字列） - hp (ポケモンの体力、整数） - attack （ポケモンの攻撃力、整数） take_damageメソッド
def take_damage(self, damage): ... というメソッドを定義します。
ポケモンがダメージを受けた時に呼ばれて、引数のdamage分、ポケモンのhpを減らします。 ただし、hpは0より小さくは（マイナスには）なりません。
同時に、以下のようなprint文を表示してください。 {}の部分に具体的な文字列や数字が入ります。
{ポケモンの名前} は {ダメージの値} ダメージを受けた！（残りHP: {HPの値}）
print文で表示する文字列の中に変数（属性）の値を入れたい場合は、f&amp;quot;文字列{変数名}文字列&amp;quot;のような書き方をします。 ポケモンの名前の属性はself.name、ダメージの変数はdamage、HPの値の属性はself.hpなので以下のように記述します。
print(f&amp;#34;{self.name} は {damage} ダメージを受けた！（残りHP: {self.hp}）&amp;#34;) is_faintedメソッド
def is_fainted(self): ... return ... というメソッドを定義します。
ポケモンが戦闘不能（HPが0）かどうかを判定するメソッドです。
戻り値（メソッドがreturnで返す値）はTrue（戦闘不能）かFalse（戦闘可能）です。
課題１ 以下のサンプルコードをコピペして、Pokemon.pyというファイルを作成してください。 これにPokemonクラスを追加してプログラムを完成させてください。
# ここにポケモンクラスを追加してください。 class Battle:	#ポケモン同士が戦闘するクラス def __init__(self, pokemon1, pokemon2):	# 戦闘する２匹のポケモンを指定する self.</description>
      <content>&lt;h1 id=&#34;クラス入門その２クラスを使ってゲームを作ろう&#34;&gt;クラス入門その２　クラスを使ってゲームを作ろう&lt;/h1&gt;
&lt;p&gt;レッスン118で習ったクラスを使って、Pythonで簡単なゲームを作ってみましょう。
最初はとてもシンプルなゲームですが、徐々に機能を追加していきます。&lt;/p&gt;
&lt;p&gt;作成するゲームはポケモンバトルゲームです。
3匹のポケモンが登場し、そのうち2匹が戦います。&lt;/p&gt;
&lt;p&gt;必要な「クラス」はPokemonクラスとBattle（戦闘）クラスです。
Battle（戦闘）クラスはあらかじめ用意してあるので、Pokemonクラスを作成していきます。&lt;/p&gt;
&lt;h2 id=&#34;作成するクラス&#34;&gt;作成するクラス&lt;/h2&gt;
&lt;p&gt;Pokemonクラスを作成してください。
Pokemonクラスは以下のような仕組みを持っています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;コンストラクタ(__init__メソッド）&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self, name, hp, attack):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;というメソッドを定義します。&lt;/p&gt;
&lt;p&gt;クラスからインスタンス（実体）を作成する時に呼ばれるメソッドを「コンストラクタ」と呼びます。
Pythonでは&lt;code&gt;__init__(self, 引数)&lt;/code&gt;という名前のメソッドが「コンストラクタ」です。&lt;/p&gt;
&lt;p&gt;以下の引数を設定し、属性(self.XXXXという変数）に設定します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; - name （ポケモンの名前、文字列）
 - hp (ポケモンの体力、整数）
 - attack （ポケモンの攻撃力、整数）
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;take_damageメソッド&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;take_damage&lt;/span&gt;(self, damage):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;というメソッドを定義します。&lt;/p&gt;
&lt;p&gt;ポケモンがダメージを受けた時に呼ばれて、引数のdamage分、ポケモンのhpを減らします。
ただし、hpは0より小さくは（マイナスには）なりません。&lt;/p&gt;
&lt;p&gt;同時に、以下のようなprint文を表示してください。
{}の部分に具体的な文字列や数字が入ります。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;{ポケモンの名前} は {ダメージの値} ダメージを受けた！（残りHP: {HPの値}）&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;print文で表示する文字列の中に変数（属性）の値を入れたい場合は、&lt;code&gt;f&amp;quot;文字列{変数名}文字列&amp;quot;&lt;/code&gt;のような書き方をします。
ポケモンの名前の属性は&lt;code&gt;self.name&lt;/code&gt;、ダメージの変数は&lt;code&gt;damage&lt;/code&gt;、HPの値の属性は&lt;code&gt;self.hp&lt;/code&gt;なので以下のように記述します。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; は &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;damage&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; ダメージを受けた！（残りHP: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;）&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;is_faintedメソッド&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;is_fainted&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;というメソッドを定義します。&lt;/p&gt;
&lt;p&gt;ポケモンが戦闘不能（HPが0）かどうかを判定するメソッドです。&lt;/p&gt;
&lt;p&gt;戻り値（メソッドが&lt;code&gt;return&lt;/code&gt;で返す値）はTrue（戦闘不能）かFalse（戦闘可能）です。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;課題１&#34;&gt;課題１&lt;/h2&gt;
&lt;p&gt;以下のサンプルコードをコピペして、Pokemon.pyというファイルを作成してください。
これにPokemonクラスを追加してプログラムを完成させてください。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-Python&#34; data-lang=&#34;Python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ここにポケモンクラスを追加してください。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Battle&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;#ポケモン同士が戦闘するクラス&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self, pokemon1, pokemon2):	&lt;span style=&#34;color:#75715e&#34;&gt;# 戦闘する２匹のポケモンを指定する&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pokemon1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pokemon2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fight&lt;/span&gt;(self):	&lt;span style=&#34;color:#75715e&#34;&gt;# ポケモン同士が戦闘する&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; vs &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon2&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; の戦闘開始！&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		turn &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;# 交互に攻撃するためのターンの回数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;# 戦闘ループ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; turn &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;# 偶数のターン回数だったら&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;				attacker &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon1		&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃するのはポケモン１&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;				defender &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon2 	&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃されるのはポケモン２&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;# 奇数のターン回数だったら&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;				attacker &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon2		&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃するのはポケモン２&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;				defender &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon1 	&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃されるのはポケモン１&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;attacker&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; の攻撃！&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			defender&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;take_damage(attacker&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;attack)	&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃するポケモンの攻撃力で攻撃されるポケモンはダメージを受ける&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; defender&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;is_fainted():	&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃されたポケモンが戦闘不能になったら&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;				print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;defender&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; は倒れた！ &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;attacker&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; の勝ち！&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;				&lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;# 戦闘ループから抜ける&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			turn &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;		&lt;span style=&#34;color:#75715e&#34;&gt;# ターン回数を更新する&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; __name__ &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;# メインプログラム&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	charmander &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Pokemon(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ヒトカゲ&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt;)	&lt;span style=&#34;color:#75715e&#34;&gt;# ヒトカゲポケモンを作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	squirtle &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Pokemon(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ゼニガメ&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt;)	&lt;span style=&#34;color:#75715e&#34;&gt;# ゼニガメポケモンを作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	bulbasaur &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Pokemon(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;フシギダネ&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt;)	&lt;span style=&#34;color:#75715e&#34;&gt;# フシギダネポケモンを作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	battle &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Battle(charmander, squirtle)		&lt;span style=&#34;color:#75715e&#34;&gt;# ヒトカゲとゼニガメがバトルフィールドへ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	battle&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;fight()	&lt;span style=&#34;color:#75715e&#34;&gt;# 戦闘開始&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;１〜３のメソッドを持ったPokemonクラスを追加して、このプログラムを完成させ、実行するとコンソールに以下が表示されます。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ヒトカゲ vs ゼニガメ の戦闘開始！

ヒトカゲ の攻撃！
ゼニガメ は 40 ダメージを受けた！（残りHP: 60）

ゼニガメ の攻撃！
ヒトカゲ は 40 ダメージを受けた！（残りHP: 60）

ヒトカゲ の攻撃！
ゼニガメ は 40 ダメージを受けた！（残りHP: 20）

ゼニガメ の攻撃！
ヒトカゲ は 40 ダメージを受けた！（残りHP: 20）

ヒトカゲ の攻撃！
ゼニガメ は 40 ダメージを受けた！（残りHP: 0）

ゼニガメ は倒れた！ ヒトカゲ の勝ち！
&lt;/code&gt;&lt;/pre&gt;&lt;details&gt;&lt;summary&gt;回答例&lt;/summary&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;class Pokemon:
    def __init__(self, name, hp, attack):
        self.name = name
        self.hp = hp
        self.attack = attack
    
    def take_damage(self, damage):
        self.hp -= damage
        if self.hp &amp;lt; 0:
            self.hp = 0
        print(f&amp;#34;\n{self.name} は {damage} ダメージを受けた！（残りHP: {self.hp}）&amp;#34;)
        
    def is_fainted(self):
        return self.hp == 0
&lt;/code&gt;&lt;/pre&gt;&lt;/details&gt;
&lt;h2 id=&#34;課題２&#34;&gt;課題２&lt;/h2&gt;
&lt;p&gt;ポケモンに「炎」、「水」、「草」などのポケモンタイプ(poke_type)を追加してください。&lt;/p&gt;
&lt;p&gt;それぞれのポケモンタイプには弱点と強みがあります。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:center&#34;&gt;ポケモンタイプ&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;弱点&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;強み&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;炎&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;水&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;草&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;水&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;草&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;炎&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;草&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;炎&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;水&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Pokemonクラスのコンストラクタの引数に「poke_type」を追加し、ポケモンの属性も追加して設定する&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pokemonクラスに「クラス変数」としてタイプの強みと弱みのテーブル（辞書）type_chartを追加する&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Pokemon&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	type_chart &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;炎&amp;#34;&lt;/span&gt; : {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;弱点&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;水&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;強み&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;草&amp;#34;&lt;/span&gt;},		&lt;span style=&#34;color:#75715e&#34;&gt;# 炎タイプの弱点は水、強みは草&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;水&amp;#34;&lt;/span&gt; : {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;弱点&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;草&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;強み&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;炎&amp;#34;&lt;/span&gt;},		&lt;span style=&#34;color:#75715e&#34;&gt;# 水タイプの弱点は草、強みは炎&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;草&amp;#34;&lt;/span&gt; : {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;弱点&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;炎&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;強み&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;水&amp;#34;&lt;/span&gt;}		&lt;span style=&#34;color:#75715e&#34;&gt;# 草タイプの弱点は炎、強みは水&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self, name, hp, attack, poke_type):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このように、クラスのすぐ下に定義される変数を「クラス変数」と言い、クラス共通で使用する値を設定することができます。
クラス変数はPokemon.type_chartのように{クラス名}.{クラス変数名}で参照することができます。&lt;/p&gt;
&lt;p&gt;自分のポケモンタイプから強み・弱点を取得するには、以下のようにして参照することができます。&lt;/p&gt;
&lt;p&gt;自分のポケモンタイプの強み： &lt;code&gt;Pokemon.type_chart[self.poke_type][&#39;強み&#39;]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;自分のポケモンタイプの弱点： &lt;code&gt;Pokemon.type_chart[self.poke_type][&#39;弱点&#39;]&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ポケモンのタイプとそのタイプの強み・弱点を以下のように表示するshow_type_advantage()メソッドを追加する&lt;/p&gt;
&lt;p&gt;表示する内容の例は以下の通りです。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ヒトカゲ のタイプ: 炎
 - 弱点: 水
 - 強み: 草
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ポケモン作成後に、このhow_type_advantage()メソッドを呼んで表示します。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;take_damage()メソッドを変更する&lt;/p&gt;
&lt;p&gt;引数をダメージ(damage)から相手のポケモン(opponent)に変更し、ダメージ(damage)は相手のポケモンの攻撃力(attack)に設定します。
さらに、ポケモン同士の相性にしたがい、相手のポケモンのタイプが自分の弱点であれば、ダメージ(damage)を1.5倍し、自分の強みであればダメージ(damage)を0.5倍にします。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これらの変更を行って、プログラムを実行すると以下のようにコンソールに表示されます。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ヒトカゲ のタイプ： 炎
 - 弱点： 水
 - 強み： 草
ゼニガメ のタイプ： 水
 - 弱点： 草
 - 強み： 炎
フシギダネ のタイプ： 草
 - 弱点： 炎
 - 強み： 水
 
ヒトカゲ vs ゼニガメ の戦闘開始！

ヒトカゲ の攻撃！
ゼニガメ は 20 ダメージを受けた！（残りHP: 80）

ゼニガメ の攻撃！
ヒトカゲ は 60 ダメージを受けた！（残りHP: 40）

ヒトカゲ の攻撃！
ゼニガメ は 20 ダメージを受けた！（残りHP: 60）

ゼニガメ の攻撃！
ヒトカゲ は 60 ダメージを受けた！（残りHP: 0）

ヒトカゲ は倒れた！ ゼニガメ の勝ち！
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pokemon.pyを修正して、実行結果が上記のようになるようにしてください。&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;回答例&lt;/summary&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Pokemon&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	type_chart &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {	&lt;span style=&#34;color:#75715e&#34;&gt;# タイプ同士の相性テーブル（クラス変数）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;炎&amp;#34;&lt;/span&gt; : {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;弱点&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;水&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;強み&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;草&amp;#34;&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;水&amp;#34;&lt;/span&gt; : {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;弱点&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;草&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;強み&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;炎&amp;#34;&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;草&amp;#34;&lt;/span&gt; : {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;弱点&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;炎&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;強み&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;水&amp;#34;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self, name, hp, attack, poke_type):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; name
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; hp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;attack &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; attack
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;poke_type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; poke_type	&lt;span style=&#34;color:#75715e&#34;&gt;# ポケモンのタイプを追加&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;show_type_advantage&lt;/span&gt;(self):	&lt;span style=&#34;color:#75715e&#34;&gt;# ポケモンのタイプを表示するメソッド&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; のタイプ： &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;poke_type&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; - 強み： &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;Pokemon&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;type_chart[self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;poke_type][&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;強み&amp;#39;&lt;/span&gt;]&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; - 弱点： &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;Pokemon&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;type_chart[self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;poke_type][&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;弱点&amp;#39;&lt;/span&gt;]&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;take_damage&lt;/span&gt;(self, opponent):	&lt;span style=&#34;color:#75715e&#34;&gt;# 引数を戦闘相手のポケモンに変更&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; Pokemon&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;type_chart[self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;poke_type][&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;強み&amp;#39;&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;poke_type:	&lt;span style=&#34;color:#75715e&#34;&gt;# 戦闘相手のポケモンのタイプが「強み」なら&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; int(opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;attack &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;)	&lt;span style=&#34;color:#75715e&#34;&gt;# ダメージが半減&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; Pokemon&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;type_chart[self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;poke_type][&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;弱点&amp;#39;&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;poke_type:	&lt;span style=&#34;color:#75715e&#34;&gt;# 戦闘相手のポケモンのタイプが「弱点」なら&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; int(opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;attack &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1.5&lt;/span&gt;)	&lt;span style=&#34;color:#75715e&#34;&gt;# ダメージが1.5倍&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;# それ以外なら&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;attack	&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃力がそのままダメージになる	&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;-=&lt;/span&gt; damage
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; は &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;damage&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; ダメージを受けた！（残りHP: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;）&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;is_fainted&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Battle&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;#ポケモン同士が戦闘するクラス&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self, pokemon1, pokemon2):	&lt;span style=&#34;color:#75715e&#34;&gt;# 戦闘する２匹のポケモンを指定する&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pokemon1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pokemon2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fight&lt;/span&gt;(self):	&lt;span style=&#34;color:#75715e&#34;&gt;# ポケモン同士が戦闘する&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; vs &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon2&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; の戦闘開始！&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		turn &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;# 交互に攻撃するためのターンの回数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;# 戦闘ループ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; turn &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;# 偶数のターン回数だったら&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;				attacker &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon1		&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃するのはポケモン１&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;				defender &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon2 	&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃されるのはポケモン２&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;# 奇数のターン回数だったら&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;				attacker &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon2		&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃するのはポケモン２&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;				defender &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon1 	&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃されるのはポケモン１&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;attacker&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; の攻撃！&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			defender&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;take_damage(attacker)	&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃する相手のポケモンから攻撃されるポケモンはダメージを受ける&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; defender&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;is_fainted():	&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃されたポケモンが戦闘不能になったら&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;				print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;defender&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; は倒れた！ &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;attacker&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; の勝ち！&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;				&lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;# 戦闘ループから抜ける&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			turn &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;		&lt;span style=&#34;color:#75715e&#34;&gt;# ターン回数を更新する&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; __name__ &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;# メインプログラム&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	charmander &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Pokemon(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ヒトカゲ&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;炎&amp;#34;&lt;/span&gt;)	&lt;span style=&#34;color:#75715e&#34;&gt;# ヒトカゲポケモンを作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	charmander&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;show_type_advantage()	&lt;span style=&#34;color:#75715e&#34;&gt;# ポケモンのタイプと特徴を表示&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	squirtle &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Pokemon(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ゼニガメ&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;水&amp;#34;&lt;/span&gt;)	&lt;span style=&#34;color:#75715e&#34;&gt;# ゼニガメポケモンを作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	squirtle&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;show_type_advantage()	&lt;span style=&#34;color:#75715e&#34;&gt;# ポケモンのタイプと特徴を表示&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	bulbasaur &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Pokemon(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;フシギダネ&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;草&amp;#34;&lt;/span&gt;)	&lt;span style=&#34;color:#75715e&#34;&gt;# フシギダネポケモンを作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	bulbasaur&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;show_type_advantage()		&lt;span style=&#34;color:#75715e&#34;&gt;# ポケモンのタイプと特徴を表示&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	battle &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Battle(charmander, squirtle)		&lt;span style=&#34;color:#75715e&#34;&gt;# ヒトカゲとゼニガメがバトルフィールドへ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	battle&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;fight()	&lt;span style=&#34;color:#75715e&#34;&gt;# 戦闘開始&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/details&gt;
&lt;h2 id=&#34;課題３&#34;&gt;課題３&lt;/h2&gt;
&lt;p&gt;ポケモンが相手を攻撃するとき、本来は「わざ」を使います。
また、ポケモンの攻撃の威力はポケモン同士のタイプの相性によるのではなく、攻撃をうけたポケモンのタイプと攻撃の「わざ」のタイプの相性によります。&lt;/p&gt;
&lt;p&gt;そこで、「Waza」というクラスを追加して、ポケモンが「わざ」を使って攻撃するようにしてみましょう。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Wazaクラスには以下の属性があります&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; - 「わざ」の名前(name)
 - 「わざ」のタイプ(waza_type)
 - 「わざ」の威力(power)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;コンストラクタ(&lt;code&gt;__init__()&lt;/code&gt;)でこれらを受け取って、属性に設定してください&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wazaクラスには、「わざ」の名前と威力を文字列で返す&lt;code&gt;__str__()&lt;/code&gt;メソッドがあります&lt;/p&gt;
&lt;p&gt;戻り値（返す値）： {わざの名前} {わざの威力｝&lt;/p&gt;
&lt;p&gt;例：&lt;code&gt;ひのこ 40&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;クラスに&lt;code&gt;__str__()&lt;/code&gt;メソッドがあると、クラスのオブジェクト（インスタンス）をprintしたとき、このメソッドの戻り値が表示されます。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;各ポケモンが持っている「わざ」は以下の通り&lt;/p&gt;
&lt;p&gt;メインプログラムの先頭でこれらの「わざ」を作成し、各ポケモンに設定します。&lt;/p&gt;
 &lt;table&gt;
 &lt;thread&gt;
 	&lt;tr align=&#34;center&#34;&gt;
 		&lt;th&gt;ポケモン&lt;/th&gt;	&lt;th&gt;わざの名前&lt;/th&gt;	&lt;th&gt;わざのタイプ&lt;/th&gt;	&lt;th&gt;わざの威力&lt;/th&gt;
 	&lt;/tr&gt;
 &lt;/thread&gt;
 &lt;tr align=&#34;center&#34;&gt;
 	&lt;td&gt;ヒトカゲ&lt;/td&gt;	&lt;td&gt;ひのこ&lt;/td&gt;	&lt;td&gt;炎&lt;/td&gt;	&lt;td&gt;40&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr align=&#34;center&#34;&gt;
 	&lt;td&gt;ゼニガメ&lt;/td&gt;	&lt;td&gt;みずでっぽう&lt;/td&gt;	&lt;td&gt;水&lt;/td&gt;	&lt;td&gt;40&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr align=&#34;center&#34;&gt;
 	&lt;td&gt;フシギダネ&lt;/td&gt;	&lt;td&gt;はっぱカッター&lt;/td&gt;	&lt;td&gt;草&lt;/td&gt;	&lt;td&gt;40&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/table&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pokemonクラスの属性のうち、攻撃力(attack)を、「わざ」(waza)という属性に変えます&lt;/p&gt;
&lt;p&gt;コンストラクタで受け取るものもattackではなくwazaになります。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;take_damageメソッドにおいて、ダメージ(damage)を相手の攻撃力(attack)ではなく、相手の「わざ」(waza)の威力(power)に変更します&lt;/p&gt;
&lt;p&gt;&lt;code&gt;damage = opponent.waza.power&lt;/code&gt;になります&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;take_damageメソッドにおいて、ダメージ(damage)の効果に影響するのは相手のタイプ(opponent.poke_type)ではなく、相手の「わざ」のタイプに変更します&lt;/p&gt;
&lt;p&gt;相手の「わざ」のタイプ： &lt;code&gt;opponent.waza.waza_type&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;show_type_advantageメソッドにおいて、以下のように「わざ」の名前と威力も表示します&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ヒトカゲ のタイプ: 炎
 - 弱点: 水
 - 強み: 草
 - わざ: ひのこ 40
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Battleクラスのfightメソッドにおいて、ポケモンの攻撃メッセージに「わざ」の名前と威力も追加します&lt;/p&gt;
&lt;p&gt;Pokemonクラスのwaza「わざ」も追加し、以下のように表示させます。&lt;/p&gt;
&lt;p&gt;例：　&lt;code&gt;ヒトカゲ の攻撃！ ひのこ 40!!&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これらの変更を行って、プログラムを実行すると以下のようにコンソールに表示されます。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ヒトカゲ のタイプ： 炎
 - 弱点： 水
 - 強み： 草
 - わざ： ひのこ 40
ゼニガメ のタイプ： 水
 - 弱点： 草
 - 強み： 炎
 - わざ： みずでっぽう 40
フシギダネ のタイプ： 草
 - 弱点： 炎
 - 強み： 水
 - わざ： はっぱカッター 40
 
ヒトカゲ vs ゼニガメ の戦闘開始！

ヒトカゲ の攻撃！ ひのこ 40!!
ゼニガメ は 20 ダメージを受けた！（残りHP: 80）

ゼニガメ の攻撃！ みずでっぽう 40!!
ヒトカゲ は 60 ダメージを受けた！（残りHP: 40）

ヒトカゲ の攻撃！ ひのこ 40!!
ゼニガメ は 20 ダメージを受けた！（残りHP: 60）

ゼニガメ の攻撃！みずでっぽう 40!!
ヒトカゲ は 60 ダメージを受けた！（残りHP: 0）

ヒトカゲ は倒れた！ ゼニガメ の勝ち！
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pokemon.pyを修正して、実行結果が上記のようになるようにしてください。&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;回答例&lt;/summary&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Waza&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self, name, power, waza_type):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; name
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; power
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza_type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; waza_type
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __str__(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Pokemon&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	type_chart &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;炎&amp;#34;&lt;/span&gt; : {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;弱点&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;水&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;強み&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;草&amp;#34;&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;水&amp;#34;&lt;/span&gt; : {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;弱点&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;草&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;強み&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;炎&amp;#34;&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;草&amp;#34;&lt;/span&gt; : {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;弱点&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;炎&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;強み&amp;#34;&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;水&amp;#34;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self, name, hp, waza, poke_type):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; name
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; hp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; waza
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;poke_type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; poke_type
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;show_type_advantage&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; のタイプ： &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;poke_type&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; - 強み： &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;Pokemon&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;type_chart[self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;poke_type][&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;強み&amp;#39;&lt;/span&gt;]&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; - 弱点： &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;Pokemon&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;type_chart[self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;poke_type][&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;弱点&amp;#39;&lt;/span&gt;]&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; - わざ： &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;take_damage&lt;/span&gt;(self, opponent):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; Pokemon&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;type_chart[self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;poke_type][&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;強み&amp;#39;&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza_type:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; int(opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; Pokemon&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;type_chart[self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;poke_type][&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;弱点&amp;#39;&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza_type:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; int(opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1.5&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;-=&lt;/span&gt; damage
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; は &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;damage&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; ダメージを受けた！（残りHP: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;）&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;is_fainted&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Battle&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;#ポケモン同士が戦闘するクラス&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self, pokemon1, pokemon2):	&lt;span style=&#34;color:#75715e&#34;&gt;# 戦闘する２匹のポケモンを指定する&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pokemon1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pokemon2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fight&lt;/span&gt;(self):	&lt;span style=&#34;color:#75715e&#34;&gt;# ポケモン同士が戦闘する&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; vs &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon2&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; の戦闘開始！&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		turn &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;# 交互に攻撃するためのターンの回数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;# 戦闘ループ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; turn &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;# 偶数のターン回数だったら&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;				attacker &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon1		&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃するのはポケモン１&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;				defender &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon2 	&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃されるのはポケモン２&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;# 奇数のターン回数だったら&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;				attacker &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon2		&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃するのはポケモン２&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;				defender &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon1 	&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃されるのはポケモン１&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;attacker&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; の攻撃！ &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;attacker&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;!!&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			defender&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;take_damage(attacker)	&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃するポケモンの攻撃力で攻撃されるポケモンはダメージを受ける&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; defender&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;is_fainted():	&lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃されたポケモンが戦闘不能になったら&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;				print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;defender&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; は倒れた！ &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;attacker&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; の勝ち！&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;				&lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;# 戦闘ループから抜ける&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			turn &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;		&lt;span style=&#34;color:#75715e&#34;&gt;# ターン回数を更新する&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; __name__ &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;# メインプログラム&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	fire_waza &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Waza(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ひのこ&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;炎&amp;#34;&lt;/span&gt;)				&lt;span style=&#34;color:#75715e&#34;&gt;# 炎わざ「ひのこ」威力40&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	water_waza &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Waza(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;みずでっぽう&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;水&amp;#34;&lt;/span&gt;)		&lt;span style=&#34;color:#75715e&#34;&gt;# 水わざ「みずでっぽう」威力40&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	grass_waza &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Waza(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;はっぱカッター&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;草&amp;#34;&lt;/span&gt;)		&lt;span style=&#34;color:#75715e&#34;&gt;# 草わざ「はっぱカッター」威力40&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	charmander &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Pokemon(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ヒトカゲ&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;, fire_waza, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;炎&amp;#34;&lt;/span&gt;)	&lt;span style=&#34;color:#75715e&#34;&gt;# ヒトカゲポケモンを作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	charmander&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;show_type_advantage()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	squirtle &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Pokemon(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ゼニガメ&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;, water_waza, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;水&amp;#34;&lt;/span&gt;)	&lt;span style=&#34;color:#75715e&#34;&gt;# ゼニガメポケモンを作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	squirtle&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;show_type_advantage()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	bulbasaur &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Pokemon(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;フシギダネ&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;, grass_waza, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;草&amp;#34;&lt;/span&gt;)	&lt;span style=&#34;color:#75715e&#34;&gt;# フシギダネポケモンを作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	bulbasaur&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;show_type_advantage()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	battle &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Battle(charmander, squirtle)		&lt;span style=&#34;color:#75715e&#34;&gt;# ヒトカゲとゼニガメがバトルフィールドへ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	battle&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;fight()	&lt;span style=&#34;color:#75715e&#34;&gt;# 戦闘開始&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/details&gt;
&lt;h2 id=&#34;課題４&#34;&gt;課題４&lt;/h2&gt;
&lt;p&gt;レッスン119で習ったクラスの「継承」「ポリモーフィズム」を使って、プログラムをリファクタリング（作り直し）してみましょう。&lt;/p&gt;
&lt;p&gt;Pokemonクラスを抽象クラスにし、各ポケモンタイプごとに新たなクラスを作成します&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;abcライブラリをimportしてABC, abstractmethodが使えるようにし、Pokemonクラスを抽象クラスに設定します&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; abc &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; ABC, abstractmethod
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Pokemon&lt;/span&gt;(ABC):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pokemonクラスからtype_chartクラス変数とポケモンタイプの属性を削除します&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Pokemon&lt;/span&gt;(ABC):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self, name, hp, waza):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;show_type_advantageメソッドを仮想メソッドにします&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@abstractmethod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;show_type_advantage&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;pass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;get_damageという仮想メソッドを追加します&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@abstractmethod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_damage&lt;/span&gt;(self, opponent):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;pass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;take_damageメソッドにおいて、damageを取得する部分を上記のget_damageメソッドから取得するように変更します&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;take_damage&lt;/span&gt;(self, opponent):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get_damage(opponent)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;-=&lt;/span&gt; damage
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;炎ポケモンクラス(Fire_Pokemon)、水ポケモンクラス(Water_Pokemon)、草ポケモンクラス(Grass_Pokemon)を作成し、Pokemonクラスを継承します&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Fire_Pokemon&lt;/span&gt;(Pokemon):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Water_Pokemon&lt;/span&gt;(Pokemon):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Grass_Pokemon&lt;/span&gt;(Pokemon):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;各クラスにshow_type_advantageメソッドと、get_damageメソッドを追加します&lt;/p&gt;
&lt;p&gt;type_charテーブルを削除したので、このテーブルを使わず、代わりに各クラスに対応した情報を直接書き込みます。&lt;/p&gt;
&lt;p&gt;例：Grass_Pokemonクラス&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Grass_Pokemon&lt;/span&gt;(Pokemon):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;show_type_advantage&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; のタイプ： 草&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; - 強み： 水&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; - 弱点： 炎&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; - わざ： &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_damage&lt;/span&gt;(self, opponent):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; 	opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza_type &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;水&amp;#34;&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;# 草タイプポケモンの強みは水タイプのわざ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; int(opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza_type &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;炎&amp;#34;&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;# 草タイプポケモンの弱点は炎タイプのわざ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; int(opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1.5&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; damage
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ポケモンを作成する時、ポケモンのタイプに合わせてそれぞれのポケモンタイプクラスから作成するように変更します&lt;/p&gt;
&lt;p&gt;例：フシギダネポケモンの作成&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bulbasaur &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Grass_Pokemon(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;フシギダネ&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;, grass_waza)    &lt;span style=&#34;color:#75715e&#34;&gt;# フシギダネポケモンを作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pokemon.pyを修正して、実行してみましょう。
出力結果は例題３と同じです。&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;回答例&lt;/summary&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; abc &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; ABC, abstractmethod
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Waza&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self, name, power, waza_type):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; name
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; power
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza_type &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; waza_type
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __str__(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Pokemon&lt;/span&gt;(ABC):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self, name, hp, waza):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; name
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; hp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; waza
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;@abstractmethod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;show_type_advantage&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;pass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;@abstractmethod&lt;/span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_damage&lt;/span&gt;(self, opponent):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;pass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;take_damage&lt;/span&gt;(self, opponent):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get_damage(opponent)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;-=&lt;/span&gt; damage
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; は &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;damage&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; ダメージを受けた！（残りHP: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;）&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;is_fainted&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Fire_Pokemon&lt;/span&gt;(Pokemon):   
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;show_type_advantage&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; のタイプ： 炎&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; - 強み： 草&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; - 弱点： 水&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; - わざ： &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_damage&lt;/span&gt;(self, opponent):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza_type &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;草&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; int(opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza_type &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;水&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; int(opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1.5&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; damage
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Water_Pokemon&lt;/span&gt;(Pokemon):   
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;show_type_advantage&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; のタイプ： 水&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; - 強み： 炎&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; - 弱点： 草&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; - わざ： &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_damage&lt;/span&gt;(self, opponent):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza_type &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;炎&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; int(opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza_type &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;草&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; int(opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1.5&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; damage
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Grass_Pokemon&lt;/span&gt;(Pokemon):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;show_type_advantage&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; のタイプ： 草&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; - 強み： 水&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; - 弱点： 炎&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; - わざ： &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_damage&lt;/span&gt;(self, opponent):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza_type &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;水&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; int(opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza_type &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;炎&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; int(opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1.5&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            damage &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; opponent&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;power
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; damage
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Battle&lt;/span&gt;:    &lt;span style=&#34;color:#75715e&#34;&gt;#ポケモン同士が戦闘するクラス&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self, pokemon1, pokemon2):    &lt;span style=&#34;color:#75715e&#34;&gt;# 戦闘する２匹のポケモンを指定する&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pokemon1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pokemon2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fight&lt;/span&gt;(self):    &lt;span style=&#34;color:#75715e&#34;&gt;# ポケモン同士が戦闘する&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; vs &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon2&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; の戦闘開始！&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        turn &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 交互に攻撃するためのターンの回数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;:    &lt;span style=&#34;color:#75715e&#34;&gt;# 戦闘ループ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; turn &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;:    &lt;span style=&#34;color:#75715e&#34;&gt;# 偶数のターン回数だったら&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                attacker &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon1        &lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃するのはポケモン１&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                defender &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon2     &lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃されるのはポケモン２&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:    &lt;span style=&#34;color:#75715e&#34;&gt;# 奇数のターン回数だったら&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                attacker &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon2        &lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃するのはポケモン２&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                defender &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pokemon1     &lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃されるのはポケモン１&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;attacker&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; の攻撃！ &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;attacker&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;waza&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;!!&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            defender&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;take_damage(attacker)    &lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃するポケモンの攻撃力で攻撃されるポケモンはダメージを受ける&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; defender&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;is_fainted():    &lt;span style=&#34;color:#75715e&#34;&gt;# 攻撃されたポケモンが戦闘不能になったら&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;defender&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; は倒れた！ &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;attacker&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; の勝ち！&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 戦闘ループから抜ける&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            turn &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# ターン回数を更新する&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; __name__ &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;:    &lt;span style=&#34;color:#75715e&#34;&gt;# メインプログラム&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    fire_waza &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Waza(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ひのこ&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;炎&amp;#34;&lt;/span&gt;)                &lt;span style=&#34;color:#75715e&#34;&gt;# 炎わざ「ひのこ」威力40&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    water_waza &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Waza(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;みずでっぽう&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;水&amp;#34;&lt;/span&gt;)        &lt;span style=&#34;color:#75715e&#34;&gt;# 水わざ「みずでっぽう」威力40&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    grass_waza &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Waza(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;はっぱカッター&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;40&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;草&amp;#34;&lt;/span&gt;)        &lt;span style=&#34;color:#75715e&#34;&gt;# 草わざ「はっぱカッター」威力40&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    charmander &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Fire_Pokemon(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ヒトカゲ&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;, fire_waza)    &lt;span style=&#34;color:#75715e&#34;&gt;# ヒトカゲポケモンを作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    charmander&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;show_type_advantage()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    squirtle &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Water_Pokemon(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ゼニガメ&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;, water_waza)    &lt;span style=&#34;color:#75715e&#34;&gt;# ゼニガメポケモンを作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    squirtle&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;show_type_advantage()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    bulbasaur &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Grass_Pokemon(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;フシギダネ&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;, grass_waza)    &lt;span style=&#34;color:#75715e&#34;&gt;# フシギダネポケモンを作成&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    bulbasaur&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;show_type_advantage()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    battle &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Battle(charmander, squirtle)        &lt;span style=&#34;color:#75715e&#34;&gt;# ヒトカゲとゼニガメがバトルフィールドへ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    battle&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;fight()    &lt;span style=&#34;color:#75715e&#34;&gt;# 戦闘開始&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/details&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;レッスン118で学んだ「クラス」を使って、簡単なポケモンバトルゲームを作ることができました。
このように、クラスを使うと簡単に「わざ」を増やしたり、いろいろなタイプのポケモンたちを増やしたりすることができるようになります。
プログラムを改造し、好きなポケモンを増やして、バトルさせてみましょう。&lt;/p&gt;
&lt;p&gt;もちろん、実際のポケモンバトルゲームはもっともっと複雑ですが、「クラス」を使って共通化するという基本的な考え方は同じです。&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>レッスン118</title>
      <link>/lessons/lesson118/</link>
      <pubDate>Sun, 09 Aug 2026 08:00:00 +0900</pubDate>
      
      <guid>/lessons/lesson118/</guid>
      <description>クラス入門 Pythonには「クラス(class)」と呼ばれる仕組みがあります。 この「クラス」は、どのような仕組みで、どのように使用するのか簡単に説明します。
オブジェクト指向プログラミング 「クラス」は「オブジェクト指向プログラミング(Object Oriented Programming, OOP)」といわれるプログラミング手法で使用される仕組みです。 では、この「オブジェクト指向プログラミング」とはどんな手法でしょう。
「オブジェクト指向プログラミング」とは「モノ（オブジェクト）」とその「モノ」が「どんなもので、どう動くか」に注目する考え方です。
例えば、あなたがシューティングゲーム（射撃ゲーム）を作ろうとしているとしましょう。
このシューティングゲームは以下のようなシナリオだとします。
あなたは、HPが3で3回相手の弾に当たると死んでゲームが終了し、あなたの負けになる あなたは、上下に移動することができる あなたは、好きなタイミングで弾を撃つことができる 敵のモンスターは、最初はHPが1であなたの弾に1回あたると死んでしまう 敵のモンスターが死ぬと、HPが1つ多い新たなモンスターが現れる 最後にHPが5のラスボスモンスターが現れ、このモンスターを倒すとゲームが終了し、あなたの勝ちになる 敵のモンスターは上下にランダムに移動する 敵のモンスターはランダムに弾を打ってくる このゲームの基本的な登場人物は以下の通りです。
自分（あなた） 敵（モンスター） 弾（あなたと敵の弾） 「オブジェクト指向プログラミング」ではこの登場人物（モノ、オブジェクト）に注目し、「どんなモノ（属性）」で「どう動くか（メソッド）」を考えます。
まず、自分に注目してみます。
自分はHPが3（どんなモノ） 自分は上下に動ける（どう動くか） 自分は弾を撃てる（どう動くか） 次に、敵のモンスターに注目します。
敵のHPは1〜5（どんなモノ） 敵は上下にランダムに動く（どう動くか） 敵はランダムに弾を撃つ（どう動くか） 最後に弾に注目します
弾はあなたの弾と敵の弾がある（どんなモノ） 一定の速度で移動する（どう動くか） これらを登場人物ごとに整理してみましょう
番号 1 2 3 登場人物 自分 敵 弾 どんなモノ（属性） HPが3 HPが1〜5 自分の弾か敵の弾 どう動く（メソッド） 上下に動く 上下にランダムに動く 一定の速度で移動する どう動く（メソッド） 弾を撃つ 弾をランダムに撃つ ゲームは、この登場人物を組み合わせてプログラムを作っていけば出来上がります。
例えば
「1 自分」の「3 弾」が「2 敵」に当たったら「2 敵」のHPが1つ減る のようなプログラムを先ほどのシナリオに合わせて作っていけば良いことになります。
このように「自分」「敵」「弾」といった「モノ（オブジェクト）」に注目して、プログラムを作っていくことを「オブジェクト指向プログラミング」と言います。
クラスとインスタンス クラスとは、先ほど整理した「モノ」ごとに「どんなモノ（属性）」「どう動く（メソッド）」を定義した設計図のことです。
「どんなモノ」のことを「クラスの属性」、「どう動く」のことを「クラスのメソッド」と呼びます。
そして、設計図に基づいて作られた「自分」「敵」「弾」などの実際のモノを「インスタンス」と呼びます。
と言われても、さっぱりわかりませんよね。</description>
      <content>&lt;h1 id=&#34;クラス入門&#34;&gt;クラス入門&lt;/h1&gt;
&lt;p&gt;Pythonには「クラス(class)」と呼ばれる仕組みがあります。
この「クラス」は、どのような仕組みで、どのように使用するのか簡単に説明します。&lt;/p&gt;
&lt;h2 id=&#34;オブジェクト指向プログラミング&#34;&gt;オブジェクト指向プログラミング&lt;/h2&gt;
&lt;p&gt;「クラス」は「オブジェクト指向プログラミング(Object Oriented Programming, OOP)」といわれるプログラミング手法で使用される仕組みです。
では、この「オブジェクト指向プログラミング」とはどんな手法でしょう。&lt;/p&gt;
&lt;p&gt;「オブジェクト指向プログラミング」とは「モノ（オブジェクト）」とその「モノ」が「どんなもので、どう動くか」に注目する考え方です。&lt;/p&gt;
&lt;p&gt;例えば、あなたがシューティングゲーム（射撃ゲーム）を作ろうとしているとしましょう。&lt;/p&gt;
&lt;p&gt;このシューティングゲームは以下のようなシナリオだとします。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;あなたは、HPが3で3回相手の弾に当たると死んでゲームが終了し、あなたの負けになる&lt;/li&gt;
&lt;li&gt;あなたは、上下に移動することができる&lt;/li&gt;
&lt;li&gt;あなたは、好きなタイミングで弾を撃つことができる&lt;/li&gt;
&lt;li&gt;敵のモンスターは、最初はHPが1であなたの弾に1回あたると死んでしまう&lt;/li&gt;
&lt;li&gt;敵のモンスターが死ぬと、HPが1つ多い新たなモンスターが現れる&lt;/li&gt;
&lt;li&gt;最後にHPが5のラスボスモンスターが現れ、このモンスターを倒すとゲームが終了し、あなたの勝ちになる&lt;/li&gt;
&lt;li&gt;敵のモンスターは上下にランダムに移動する&lt;/li&gt;
&lt;li&gt;敵のモンスターはランダムに弾を打ってくる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;このゲームの基本的な登場人物は以下の通りです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;自分（あなた）&lt;/li&gt;
&lt;li&gt;敵（モンスター）&lt;/li&gt;
&lt;li&gt;弾（あなたと敵の弾）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;「オブジェクト指向プログラミング」ではこの登場人物（モノ、オブジェクト）に注目し、「どんなモノ（属性）」で「どう動くか（メソッド）」を考えます。&lt;/p&gt;
&lt;p&gt;まず、自分に注目してみます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自分はHPが3（どんなモノ）&lt;/li&gt;
&lt;li&gt;自分は上下に動ける（どう動くか）&lt;/li&gt;
&lt;li&gt;自分は弾を撃てる（どう動くか）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;次に、敵のモンスターに注目します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;敵のHPは1〜5（どんなモノ）&lt;/li&gt;
&lt;li&gt;敵は上下にランダムに動く（どう動くか）&lt;/li&gt;
&lt;li&gt;敵はランダムに弾を撃つ（どう動くか）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最後に弾に注目します&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;弾はあなたの弾と敵の弾がある（どんなモノ）&lt;/li&gt;
&lt;li&gt;一定の速度で移動する（どう動くか）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらを登場人物ごとに整理してみましょう&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:center&#34;&gt;番号&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;1&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;2&lt;/th&gt;
&lt;th style=&#34;text-align:center&#34;&gt;3&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;登場人物&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;自分&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;敵&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;弾&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;どんなモノ（属性）&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;HPが3&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;HPが1〜5&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;自分の弾か敵の弾&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;どう動く（メソッド）&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;上下に動く&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;上下にランダムに動く&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;一定の速度で移動する&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:center&#34;&gt;どう動く（メソッド）&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;弾を撃つ&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;弾をランダムに撃つ&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ゲームは、この登場人物を組み合わせてプログラムを作っていけば出来上がります。&lt;/p&gt;
&lt;p&gt;例えば&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「1 自分」の「3 弾」が「2 敵」に当たったら「2 敵」のHPが1つ減る&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;のようなプログラムを先ほどのシナリオに合わせて作っていけば良いことになります。&lt;/p&gt;
&lt;p&gt;このように「自分」「敵」「弾」といった「モノ（オブジェクト）」に注目して、プログラムを作っていくことを「オブジェクト指向プログラミング」と言います。&lt;/p&gt;
&lt;h2 id=&#34;クラスとインスタンス&#34;&gt;クラスとインスタンス&lt;/h2&gt;
&lt;p&gt;クラスとは、先ほど整理した「モノ」ごとに「どんなモノ（属性）」「どう動く（メソッド）」を定義した設計図のことです。&lt;/p&gt;
&lt;p&gt;「どんなモノ」のことを「クラスの属性」、「どう動く」のことを「クラスのメソッド」と呼びます。&lt;/p&gt;
&lt;p&gt;そして、設計図に基づいて作られた「自分」「敵」「弾」などの実際のモノを「インスタンス」と呼びます。&lt;/p&gt;
&lt;p&gt;と言われても、さっぱりわかりませんよね。&lt;/p&gt;
&lt;p&gt;例えば、敵が死ぬと新たな敵が現れます。このとき新たに現れる敵はあらかじめ作られた設計図（クラス）から召喚（作成）されて、インスタンス（敵のモンスターの実体）になります。
弾は、自分や敵から撃たれると、召喚（作成）されてインスタンス（弾の実体）になります。
なお、自分や最初の敵は、プログラムの開始時に1回だけ召喚（作成）されインスタンス（実体）になっています。&lt;/p&gt;
&lt;p&gt;実際のpythonのプログラムで見てみましょう。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Player&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;# 自分です&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self):	&lt;span style=&#34;color:#75715e&#34;&gt;# 自分が召喚（作成）されたときに呼ばれます。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; 			&lt;span style=&#34;color:#75715e&#34;&gt;# HPは3です。	&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;y &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;			&lt;span style=&#34;color:#75715e&#34;&gt;# 最初は上下の中央にいます&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;		&lt;span style=&#34;color:#75715e&#34;&gt;# 自分は左端にいます&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;# self.hp, self.y, self.x がクラスPlayerの属性です。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;move&lt;/span&gt;(self, dy):	&lt;span style=&#34;color:#75715e&#34;&gt;# 上下(+は上、-は下）に動きます（クラスのメソッド）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;y &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; dy
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;shot&lt;/span&gt;(self):			&lt;span style=&#34;color:#75715e&#34;&gt;# 弾を打ちます（クラスのメソッド）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; Shot(&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;, self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;x, self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;y)	&lt;span style=&#34;color:#75715e&#34;&gt;# 自分の弾を自分の位置で召喚（作成）して返します。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Monster&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;# 敵のモンスターです。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self, hp):	&lt;span style=&#34;color:#75715e&#34;&gt;# 召喚（作成）されたときに、HPを指定して呼ばれます。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; hp				&lt;span style=&#34;color:#75715e&#34;&gt;# 召喚（作成）時に指定したHPを設定します&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;y &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;				&lt;span style=&#34;color:#75715e&#34;&gt;# 最初は上下の中央にいます&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;				&lt;span style=&#34;color:#75715e&#34;&gt;# 自分は右端にいます&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;# self.hp, self.y, self.x がクラスMonsterの属性です。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;move&lt;/span&gt;(self):			&lt;span style=&#34;color:#75715e&#34;&gt;# ランダムに上下します。（クラスのメソッド）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;y &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; random&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;randint(&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;) &lt;span style=&#34;color:#75715e&#34;&gt;# ±50でランダムに移動します&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;shot&lt;/span&gt;(self):			&lt;span style=&#34;color:#75715e&#34;&gt;# ランダムに弾を打ちます。（クラスのメソッド）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; random&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;randint(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;:		&lt;span style=&#34;color:#75715e&#34;&gt;# ランダムに10回に1回&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;			&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; Shot(&lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;, self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;x, self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;y)		&lt;span style=&#34;color:#75715e&#34;&gt;# 敵の弾を敵の位置で召喚（作成）して返します。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;		&lt;span style=&#34;color:#75715e&#34;&gt;# 撃たないときは空(None)を返します&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Shot&lt;/span&gt;:	&lt;span style=&#34;color:#75715e&#34;&gt;# 弾です。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self, isPlayer, x, y):	&lt;span style=&#34;color:#75715e&#34;&gt;# 召喚（作成）されたとき、自分か敵かと位置を指定して呼ばれます。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;isPlayer &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; isPlayrt		&lt;span style=&#34;color:#75715e&#34;&gt;# 自分か敵かを設定します&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; x		&lt;span style=&#34;color:#75715e&#34;&gt;# 位置を設定します&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;y &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; y
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ここまではクラス定義（設計図）ですぐには実行されません。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;player &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Player()		&lt;span style=&#34;color:#75715e&#34;&gt;# ゲーム開始時に上記で定義された自分の設計図（クラス）に基づいて自分を召喚（作成）します。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;monster &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Monster(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)	&lt;span style=&#34;color:#75715e&#34;&gt;# ゲーム開始時に上記で定義された最初の敵の設計図（クラス）に基づいて、HP1のモンスターを召喚（作成）します。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;class Player&lt;/code&gt;以下が設計図になり、&lt;code&gt;player = Player()&lt;/code&gt;で設計図（クラス）からインスタンス（プレイヤーの実体）が作成され、player変数に設定されます。&lt;/p&gt;
&lt;p&gt;同様に、&lt;code&gt;class Monster&lt;/code&gt;以下が設計図になり、&lt;code&gt;monster = Monster(1)&lt;/code&gt;で設計図（クラス）からインスタンス（モンスターの実体）が作成され、monster変数に設定されます。&lt;/p&gt;
&lt;h2 id=&#34;クラスの利点&#34;&gt;クラスの利点&lt;/h2&gt;
&lt;p&gt;クラスを使うとどんないいことがあるでしょう。
代表的なものは以下の４つです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;コピペしなくても同じ実体（インスタンス）をいっぱい作れる&lt;/li&gt;
&lt;li&gt;モノ（オブジェクト）ごとに整理されていて、修正したり、追加したりしやすい&lt;/li&gt;
&lt;li&gt;元のクラスを変更せずに、属性やメソッドを追加した新たなクラスを作ることができる&lt;/li&gt;
&lt;li&gt;モノ（オブジェクト）が違っていても、同じプログラムを使える仕組み（ポリモーフィズム）がある&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これらを１つずつ説明します。&lt;/p&gt;
&lt;h3 id=&#34;コピペしなくても同じ実体インスタンスをいっぱい作れる&#34;&gt;コピペしなくても同じ実体（インスタンス）をいっぱい作れる&lt;/h3&gt;
&lt;p&gt;クラスを使うことで、同じ設計図でたくさんの実体を作ることができます。&lt;/p&gt;
&lt;p&gt;例えば、さきほどのシューティングゲームの例では、必要な時に敵を召喚(Monster()を呼ぶ）ことで、いくらでも敵の数を増やせます。
クラスを使えば&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;monster1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Monster(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;monster2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Monster(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;monster3 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Monster(&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;のように簡単に3種類のモンスターが作れます。
もしクラスを使わなければ、&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;monster_1_hp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;monster_1_y &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;monster_1_x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;monster_2_hp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;monster_2_y &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;monster_2_x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;monster_3_hp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;monster_3_y &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;monster_3_x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;のようにモンスターごとに同じような属性や関数を用意しなければいけなくなり、コピペのかたまりになってしまいます。&lt;/p&gt;
&lt;h3 id=&#34;モノオブジェクトごとに整理されていて修正したり追加したりしやすい&#34;&gt;モノ（オブジェクト）ごとに整理されていて、修正したり、追加したりしやすい&lt;/h3&gt;
&lt;p&gt;モノ（オブジェクト）に関係するもの（属性やメソッド）がクラスとしてまとまっているので、モノ（オブジェクト）に関係するものを修正したり、追加する時、あちこちのプログラムを修正することなく、モノのクラスだけ修正すれば済むようになります。&lt;/p&gt;
&lt;p&gt;また、カプセル化といって、そのクラス以外のプログラムから変更させたくない属性や、実行させたくないメソッドをそのクラスの中だけでしか利用できないようにすることができる仕組みがあります。
例えばpythonでは、属性やメソッドの名前の頭に「_」を付けることで実現することができます。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;class Student:	# 生徒のクラス
	def __init__(self, name, age):	# 名前と年齢を指定してインスタンスを作成する	
		self._name = name	# 名前の属性_nameは直接クラスの外からアクセスできない
		self._age = age		# 年齢の属性_ageは直接クラスの外からアクセスできない
	def getName(self):		# 名前を返すメソッド（クラスの外からアクセスできる）、クラスの名前を外から変更するメソッドはない
		return self._name
	def addAge(self):		# 年齢を１つ加算するメソッド（クラスの外からアクセスできる）、ただしクラスの外から任意に変更するメソッドはない
		self._age += 1
	def getAge(self):		# 年齢を返すメソッド（クラスの外からアクセスできる）
		return self._age
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;例えば、このような生徒クラスを作ることで、生徒クラスの外からは名前と年齢を参照できるが、最初に設定した名前は後から変更できず、年齢の加算だけできるというように、生徒の情報を管理するができるようになります。&lt;/p&gt;
&lt;p&gt;また、生徒に関する属性やメソッドは、このクラス内で完結しているので、修正・追加もこのクラスだけで行えます。&lt;/p&gt;
&lt;h3 id=&#34;元のクラスを変更せずに属性やメソッドを追加した新たなクラスを作ることができる&#34;&gt;元のクラスを変更せずに、属性やメソッドを追加した新たなクラスを作ることができる&lt;/h3&gt;
&lt;p&gt;例えば、先ほどのシューティングゲームで敵のモンスターのラスボスだけは、「魔法を使う（相手を一定時間動けなくする）」ことができることにします。
ただし、それ以外の能力は通常のモンスターと一緒です。&lt;/p&gt;
&lt;p&gt;こういう場合、モンスタークラスに「魔法を使う」というメソッドを追加してしまうと、ラスボス以外のモンスターも魔法を使えるようになってしまいます。
だからといって、モンスタークラスをコピペしてラストモンスタークラスを作ると、同じようなプログラムが増えていきます。
さらに、後からモンスタークラスを修正した場合、ラストモンスタークラスにも同じ修正をしなくてはならなくなり、面倒で修正ミスなどトラブルの元になります。&lt;/p&gt;
&lt;p&gt;クラスでは「継承」という仕組みを使って元のクラスを修正せずに、属性やメソッドを追加した新たなクラスを作る仕組みがあります。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Monster&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;....&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;LastMonster&lt;/span&gt;(Monster):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;magic&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#f92672&#34;&gt;.....&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pythonではこのように書くと、LastMonsterはMonsterクラスの属性やメソッドをそのまま引き継ぎ（継承し）、拡張したい部分（mogicメソッド）だけ、追加することが可能になります。
Monsterクラスは全く変更がありませんし、Monsterクラスの変更は、全て自動的にLastMonsterクラスにも反映されることになります。&lt;/p&gt;
&lt;p&gt;また、この仕組みを積極的に使って、複数のクラスの共通部分をまとめたクラス（スーパークラス）を作り、そのクラスを継承させることで、プログラムをまとめることができます。
例えば、先ほどのシューティングゲームでは、自分もモンスターもHPと位置(x, y)を持っている部分は共通なので、例えばCharacterというスーパークラスを作り以下のようにまとめることができます。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Character&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self, hp, x, y):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;hp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; hp
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; x
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;y &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; y
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Player&lt;/span&gt;(Character):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		super()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;__init__(&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Monster&lt;/span&gt;(Character):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self, hp):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		super()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;__init__(hp, &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このようにすると、プレイヤーとモンスターで共通のメソッドを追加したい場合、Characterクラスにそのメソッドを作成すれば、わざわざ同じメソッドをプレイヤーとモンスターの各クラスにコピペして作りこむ必要はなくなり、修正する際も１つのメソッドの修正ですみます。&lt;/p&gt;
&lt;p&gt;一方、プレイヤーとモンスターでどちらか単独に属性やメソッドを追加したい場合は、該当するクラスにだけ追加すればよいことになります。
さらに、メソッドが共通でも行う内容が異なる場合なども後述する「ポリフォリズム」の仕組みを使えば実現できます。&lt;/p&gt;
&lt;p&gt;なお、このような共通クラスは通常、共通クラスだけのインスタンスを作ることはないので「抽象クラス」と呼ばれます。
PythonにはABCというライブラリを使って、「抽象クラス」を定義し、「抽象クラス」からインスタンスを作るとエラーになるという仕組みがあるので、これを使うことも可能です。&lt;/p&gt;
&lt;h3 id=&#34;モノオブジェクトが違っていても同じプログラムを使える仕組みポリモーフィズムがある&#34;&gt;モノ（オブジェクト）が違っていても、同じプログラムを使える仕組み（ポリモーフィズム）がある&lt;/h3&gt;
&lt;p&gt;クラスには「ポリモーフィズム」と呼ばれる「モノ（オブジェクト）が違っていても、同じプログラムを使える仕組み」があります。&lt;/p&gt;
&lt;p&gt;例えば、先ほどのシューティングゲームで、ゲームのシステムは一定周期（例えば1秒に1回とか）で各登場人物を表示し直す仕組みになっているとします。
この場合、いろいろな登場人物に対して、この人物はこう描画するというようにプログラミングしていたら、登場人物が増えるたびにプログラムを書き換えなければならなくなってしまいます。&lt;/p&gt;
&lt;p&gt;そこでItemという登場人物を共通化した抽象クラス（スーパークラス）を作成し、このクラスにdrawという描画を行うメソッドを定義して、描画したい場合、システムはどの登場人物に対しても、drawというメソッドを呼べばよいようにします。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-Python&#34; data-lang=&#34;Python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; abc &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; ABC, abstractmethod
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Item&lt;/span&gt;(ABC):	&lt;span style=&#34;color:#75715e&#34;&gt;# インスタンスを作らない抽象クラス&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#a6e22e&#34;&gt;@abstractmethod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;draw&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#66d9ef&#34;&gt;pass&lt;/span&gt;		&lt;span style=&#34;color:#75715e&#34;&gt;# 実際に呼ばれない仮想メソッド&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Character&lt;/span&gt;(Item, ABC):	&lt;span style=&#34;color:#75715e&#34;&gt;# このクラスもインスタンスを作らない抽象クラス&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Class Player(Character):	&lt;span style=&#34;color:#75715e&#34;&gt;# 実際にプレイヤーのインスタンスを作るクラス&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;draw&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#75715e&#34;&gt;# ここに自分を描画するプログラムを書く&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;draw player&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Class Monster(Character):	&lt;span style=&#34;color:#75715e&#34;&gt;# 実際にモンスターのインスタンスを作るクラス&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;draw&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#75715e&#34;&gt;# ここにモンスターを描画するプログラムを書く&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;draw monster&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Class Shot(Item):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;draw&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		&lt;span style=&#34;color:#75715e&#34;&gt;# ここに弾を描画するプログラムを書く&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;draw shot&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;items &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []	&lt;span style=&#34;color:#75715e&#34;&gt;# 描画する登場人物のリスト&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;player &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Player()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;items&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append(player)	&lt;span style=&#34;color:#75715e&#34;&gt;# 登場人物を召喚したら登場人物リストに追加する&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;monster &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Monster(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;items&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append(monster)	&lt;span style=&#34;color:#75715e&#34;&gt;# 登場人物を召喚したら登場人物リストに追加する&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;draw&lt;/span&gt;():	&lt;span style=&#34;color:#75715e&#34;&gt;# システムが一定周期で描画する際に呼ばれる関数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; item &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; items:		&lt;span style=&#34;color:#75715e&#34;&gt;# 登場人物を1人ずつリストから取り出し&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;		item&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;draw()		&lt;span style=&#34;color:#75715e&#34;&gt;# 登場人物を意識せずに描画する（各登場人物に対応したクラスのdrawメソッドが呼ばれる）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;システムは単純に各登場人物のdrawメソッドを呼びます。
すると登場人物に対応したクラスに実装されたdrawメソッドが呼ばれ、登場人物ごとに必要な描画の処理が行われます。&lt;/p&gt;
&lt;p&gt;このように、描画の違いは各クラスごとのメソッドが対応してくれるので、呼ぶ方のシステムは同じやり方で呼ぶことができます。&lt;/p&gt;
&lt;p&gt;今回は１つのメソッドなので単純ですが、Aというメソッドを呼び、Bというメソッドを繰り返し呼び、最後にCというメソッドを呼ぶというような複雑なプログラムでも、クラスごとにA,B,Cそれぞれのメソッドを用意することで、各クラスに対して同じプログラムで呼ぶことができるようになります。&lt;/p&gt;
&lt;p&gt;なお、抽象クラスに実装されたdrawメソッドは、実際には各クラスに実装されたdrawメソッドの方が呼ばれるので、「抽象メソッド」と呼ばれ通常は実行されません。
ただし、pythonでは、各クラスにdrawメソッドが実装されていなければ、エラーにはならず、抽象メソッドの方が実行されてしまいます。（抽象メソッドの中身はpassなので実際は何も行われなくなってしまう）
このようなことを防ぐため、ABCというライブラリを使用し&lt;code&gt;@abstractmethod&lt;/code&gt;という印を「抽象メソッド」の前に付けることで、「抽象メソッド」に対応するメソッドが各クラスで実装されていないとエラーとする仕組みがあります。&lt;/p&gt;
&lt;h2 id=&#34;まとめ&#34;&gt;まとめ&lt;/h2&gt;
&lt;p&gt;「クラス」とか「オブジェクト指向」というと非常に難しく聞こえますが、実際はプログラムを作る時、共通化できるものはできるだけ共通化して、できるだけ簡単に、バグがなく、メンテナンスのしやすいプログラムを作成するための方法です。&lt;/p&gt;
&lt;p&gt;「クラス」を活用し、きれいで、効率的で、わかりやすいプログラムが書けるようになりましょう。&lt;/p&gt;
</content>
    </item>
    
  </channel>
</rss>
