0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用】Section7での不明点_1

Posted at

概要

Udemyで酒井潤さんの講座を学習させてもらった際によくわからない部分があったので残したいと思います。

現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル

以下のようなコードがあります

class Person(object):
    def __init__(self, age = 1):
        self.age = age

    def  drive(self):
        if self.age >= 18:
            print('OK')
        else:
            raise Exception('No')

class Baby(Person):
    def __init__(self, age=1):
        if age < 18:
            super().__init__(age)
        else:
            raise ValueError

class Adult(Person):
    def __init__(self, age=18):
        if age >= 18:
            super().__init__(age)
        else:
            raise ValueError
baby = Baby()
adult = Adult()

class Car(object):
    def __init__(self, model=None):
        self.model = model
    def run(self):
        print('run')
    def ride(self, person):
        person.drive()

car = Car()
car.ride(adult)

ここでCarクラスから作成されたcarオブジェクトでrideメソッドを、adultを引数として渡して呼び出しますよね。
実行すると以下の結果になると思います。

OK
プロセスは終了コード 0 で終了しました

ここで何故エラーにならずOKが正しく出力されるか直感的によくわかりませんでした。

それで調べてみるとすごく単純なことでした。

rideメソッドの()内に記載されているpersonって渡された引数を受け取る文字列のような役割だったということです。
Personクラスがあるのでそちらと関連付けてごっちゃになってしまいましたけど、要するにpersonの部分がalienでもmonsterでも成立するわけですね。

つまりcarオブジェクトでrideメソッドを実行する際は引数としてadultを渡していましたが、これがCarクラスのrideメソッドのpersonに格納されるわけということです。

実質的には adult.drive が実行されているような感じでそれなら結果としてOKが出力されるのも納得いきました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?