クラスの構造: __init__ コンストラクタ

Pythonによるオブジェクト指向プログラミング入門

George Boorman

Curriculum Manager, DataCamp

メソッドと属性

  • メソッドはクラス内の関数定義
  • 最初の引数は self
  • 代入で属性を定義
  • クラス内での属性参照は self.___
  • 多数のメソッド呼び出しは保守が大変
class MyClass:
    # クラス内の関数定義
    # 最初の引数は self
    def my_method1(self, other_args...):
        # ここで処理

def my_method2(self, my_attr): # 代入で属性を作成 self.my_attr = my_attr ...
Pythonによるオブジェクト指向プログラミング入門

コンストラクタ

  • 作成時にオブジェクトへデータを追加
  • コンストラクタ __init__() はオブジェクト作成のたびに呼ばれる
    • __methodname__ 構文により自動で呼ばれる
class Customer:
    def __init__(self, name):
        # .name 属性を作成し、name 引数を設定
        self.name = name
        print("The __init__ method was called")
Pythonによるオブジェクト指向プログラミング入門

コンストラクタ

# __init__ は自動的に呼ばれる
cust = Customer("Lara de Silva")   
print(cust.name)
The __init__ method was called
Lara de Silva
Pythonによるオブジェクト指向プログラミング入門

メソッド内の属性

class MyClass:
    def my_method1(self, attr1):
        self.attr1 = attr1
        ...

    def my_method2(self, attr2):        
        self.attr2 = attr2
        ...

obj = MyClass() # attr1 を作成 obj.my_method1(val1) # attr2 を作成 obj.my_method2(val2)

コンストラクタ内の属性

class MyClass:
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2
        ...

# すべての属性を作成 obj = MyClass(val1, val2)
  • 一般にコンストラクタを使うべき
  • オブジェクト作成時に属性が作成される
  • 使いやすく保守しやすいコード
Pythonによるオブジェクト指向プログラミング入門

引数を追加

class Customer:
    # balance 引数を追加
    def __init__(self, name, balance): 

self.name = name # balance 属性を追加 self.balance = balance print("The __init__ method was called")
Pythonによるオブジェクト指向プログラミング入門

パラメータを追加

# __init__ が呼ばれる
cust = Customer("Lara de Silva", 1000)
print(cust.name)
print(cust.balance)
The __init__ method was called
Lara de Silva
1000
Pythonによるオブジェクト指向プログラミング入門

デフォルト引数

class Customer:
    # balance のデフォルト値を設定
    def __init__(self, name, balance=0):
        self.name = name
        # 新しい属性を代入
        self.balance = balance
        print("The __init__ method was called")
Pythonによるオブジェクト指向プログラミング入門

デフォルト引数

# balance を明示しない
cust = Customer("Lara de Silva")

print(cust.name) # balance 属性は作成される print(cust.balance)
The __init__ method was called
Lara de Silva
0
Pythonによるオブジェクト指向プログラミング入門

ベストプラクティス

1. __init__() で属性を初期化する
Pythonによるオブジェクト指向プログラミング入門

ベストプラクティス

1. __init__() で属性を初期化する
2. 命名

クラスは CamelCase、関数と属性は lower_snake_case

Pythonによるオブジェクト指向プログラミング入門

ベストプラクティス

1. __init__() で属性を初期化する
2. 命名

クラスは CamelCase、関数と属性は lower_snake_case

3. self は self のまま
class MyClass:
    # 動くが推奨しない
    def my_method(george, attr):
        george.attr = attr
Pythonによるオブジェクト指向プログラミング入門

ベストプラクティス

1. __init__() で属性を初期化する
2. 命名

クラスは CamelCase、関数と属性は lower_snake_case

3. self は self
4. ドックストリングを使う
class MyClass:
    """このクラスは何もしません"""
    pass
Pythonによるオブジェクト指向プログラミング入門

Passons à la pratique !

Pythonによるオブジェクト指向プログラミング入門

Preparing Video For Download...