Python のインスタンスメソッドは self を第一引数とします。
class Book: def __init__(self, price, quantity): self.price = price self.quantity = quantity self.sale = 0 book = Book(300, 4) print(book.sale) # 0
Book クラスは本の価格、個数、売上に関するクラスです。別のインスタンスメソッドを追加します。
class Book: def __init__(self, price, quantity): self.price = price self.quantity = quantity self.sale = 0 def get_sale(self): self.sale = self.price * self.quantity book = Book(300, 4) print(book.sale) # 0 book.get_sale() print(book.sale) # 1200
get_sale もインスタンスメソッドです。
インスタンスメソッド get_sale を呼び出す前と後で sale の値が変わっています。最初は get_sale を呼んでいないため sale は 0 です。init で sale を 0 としているからですね。
get_sale を呼ぶと
self.sale = self.price * self.quantity
が実行されて sale に 1200 が入ります。
self とはなにか?
self はそのクラスのオブジェクトをいいます。上のコードでは
book = Book(300, 4)
book がオブジェクトであり、self は book そのものをさします。
※ 初めて Python のクラスを勉強するときは、self をおまじないの単語と覚えてもいいと思います。
init は特殊なメソッドで、オブジェクトが宣言されたときに動く
init はオブジェクトを宣言するときに自動的に動きます。
class Book: def __init__(self, price, quantity): print('オブジェクトが生成された') self.price = price self.quantity = quantity print('インスタンス変数が初期化された') book = Book(300, 4) print('Start!') print(book.sale)
コンソール画面にはこう出力されます。
オブジェクトが生成された
インスタンス変数が初期化された
Start!