第10章_クラスとオブジェクトの操作
今回の項目では、クラスとオブジェクトの操作について出題されます。
本試験の主教材である「Python3エンジニア認定基礎試験問題集」では第10章(P130~P132)の3問の内容です。
練習問題 1
以下のコードを実行した時の正しい出力結果を答えてください。
class Dog:
def __init__(self):
self.bark = "woof"
def change_bark(self, bark):
self.bark = bark
def show_bark(self):
print(self.bark)
self.change_bark("bow-wow-")
print(self.bark)
答えはコチラをクリック!
答え:
woof
bow-wow-
ポイント
インスタンスメソッドは第一引数に〇〇をつける必要があります。
インスタンスメソッドは第一引数にself.をつける必要があります。
- Dog()でインスタンスを作成すると__init__メソッドによりself.barkが”woof”に初期化されます。
- show_bark()メソッドが呼ばれると、まずprint(self.bark)により”woof”が出力されます。
- 次にself.change_bark(“bow-wow-“)を実行し、self.barkの値が”bow-wow-“に変更されます。
- 最後に再度print(self.bark)が実行され、変更された値”bow-wow-“が出力されます。
このように、インスタンス変数self.barkの値は、メソッドchange_bark()によって変更されています。
練習問題 2
Animalクラスを継承したDogクラスの定義として誤っている部分を正しく修正してください。
class Dog Animal:
答えはコチラをクリック!
答え:class Dog Animal: → class Dog (Animal):
ポイント
クラスを継承するときは、親クラスを〇〇で囲む。
クラスを継承するときは、親クラスを丸括弧で囲む。
Pythonにおけるクラスの継承は、親クラスを丸括弧で囲んで指定します。
よって正しい記述は、
class Dog (Animal):
となります。
練習問題 3
あるオブジェクトがあるクラスのインスタンスであるか判定する関数として誤っている部分を正しく修正してください。
instance()
答えはコチラをクリック!
答え:instance() → isinstance()
ポイント
オブジェクトが特定のクラスのインスタンスかどうかを確認するときは〇〇を使う。
オブジェクトが特定のクラスのインスタンスかどうかを確認するときはisinstance()を使う。
instance()という関数は存在しません。
オブジェクトが特定のクラスのインスタンスかどうかはisinstance()を使用することで確認することが出来ます。
確認問題 1
Dog().show_bark()を実行した結果として、以下の結果となるものを選択してください。
woof
bow-wow-
1.
class Dog:
def __init__(self):
self.bark = "woof"
def change_bark(bark):
bark = bark
def show_bark():
print(bark)
change_bark("bow-wow-")
print(self.bark)
2.
class Dog:
def __init__(self):
self.bark = "woof"
def change_bark(self, bark):
self.bark = bark
def show_bark(self):
print(bark)
change_bark("bow-wow-")
print(bark)
3.
class Dog:
def __init__(self):
self.bark = "woof"
def change_bark(bark):
bark = bark
def show_bark():
print(self.bark)
self.change_bark("bow-wow-")
print(self.bark)
4.
class Dog:
def __init__(self):
self.bark = "woof"
def change_bark(self, bark):
self.bark = bark
def show_bark(self):
print(self.bark)
self.change_bark("bow-wow-")
print(self.bark)
答えはコチラをクリック!
答え:4
選択肢4のコードでは:
- show_barkメソッドでは、まずself.bark(”woof”)を出力します。
- 次にself.change_bark(“bow-wow-“)を呼び出し、self.barkの値を”bow-wow-“に変更します。
- 最後に変更されたself.bark(”bow-wow-“)を出力します。
選択肢1, 2, 3が間違っている理由:
- 選択肢1: メソッドにself引数がなく、bark変数が未定義です。
- 選択肢2: bark変数が未定義で、change_bark関数の呼び出し方が間違っています。
- 選択肢3: メソッドにself引数がないため実行できません。
Pythonのインスタンスメソッドは第一引数にselfを取る必要があり、インスタンス変数にアクセスするにはself.変数名の形式が必要です。
確認問題 2
Animalクラスを継承したDogクラスを定義するための記述として正しいものを選択してください。
1. class Dog extend Animal:
2. class Dog Animal:
3. class Dog (extend Animal}:
4. class Dog (Animal):
答えはコチラをクリック!
答え:4
Pythonにおけるクラスの継承は、親クラスを丸括弧で囲んで指定します。したがって、正しい構文は次の通りです。
- class Dog (Animal):
この記述によって、DogクラスはAnimalクラスを継承し、その機能や属性を引き継ぐことができます。その他の選択肢はPythonの文法として正しくありません。
確認問題 3
あるオブジェクトがあるクラスのインスタンスであるかを確認する関数として正しいものを選択してください。
1. istypeof()
2. isinstance()
3. type()
4. isinstanceof()
答えはコチラをクリック!
答え:2
Pythonには、あるオブジェクトが特定のクラスのインスタンスかどうかを確認するための組み込み関数があります。それが isinstance() です。この関数は、オブジェクトとクラスを引数に取り、そのオブジェクトがそのクラス(またはそのクラスを継承している派生クラス)のインスタンスであれば True を、そうでなければ False を返します。
他の選択肢についての解説:
- istypeof() は存在しません。
- type() はオブジェクトの型を返す関数ですが、インスタンスかどうかを直接確認するために使うものではありません。
- isinstanceof() も存在しません。
したがって、正しい選択肢は 2. isinstance() です。
次回は…
次回は「021_Pythonエンジニア認定基礎試験11-1~4」です。
標準ライブラリについて学びましょう!
参考資料一覧:Python3エンジニア認定[基礎試験]問題集
https://www.pythonic-exam.com
https://data-engineer-japan.com
https://mynavi-agent.jp
https://python-basic.com
https://www.tokai-bs.co.jp
https://freelance.techcareer.jp/articles/wp/skills/python/detail/550/
https://pythonzen-pep8-exam.jp/