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

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

Alex Yarosh

Content Quality Analyst @ DataCamp

メソッドと属性

  • メソッドはクラス内の関数定義
  • 第1引数は self
  • 代入で属性を定義
  • クラス内では self.___ で属性参照

   

class MyClass:
    # クラス内の関数定義
    # 第1引数は self
    def my_method1(self, other_args...):
        # ここで処理

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

コンストラクタ

  • 作成時にオブジェクトへデータを渡すには?
  • コンストラクタ __init__() はオブジェクト生成のたびに呼ばれる
class Customer:
       def __init__(self, name):     
        self.name = name           # <--- .name 属性を作成し、name 引数を設定
        print("The __init__ method was called")

cust = Customer("Lara de Silva") #<--- __init__ が暗黙に呼ばれる print(cust.name)
The __init__ method was called
Lara de Silva
Python によるオブジェクト指向プログラミング
class Customer:
       def __init__(self, name, balance):  # <-- balance パラメータを追加

self.name = name self.balance = balance # <-- balance 属性を追加 print("The __init__ method was called")
cust = Customer("Lara de Silva", 1000) # <-- __init__ が呼ばれる print(cust.name) print(cust.balance)
The __init__ method was called
Lara de Silva
1000
Python によるオブジェクト指向プログラミング
class Customer:
       def __init__(self, name, balance=0):  #<-- balance の既定値を設定

self.name = name self.balance = balance print("The __init__ method was called")
cust = Customer("Lara de Silva") # <-- balance を明示しない
print(cust.name) print(cust.balance) # <-- 属性は作成される
The __init__ method was called
Lara de Silva
0
Python によるオブジェクト指向プログラミング

メソッド内での属性

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

    def my_method2(self, attr2):        
        self.attr2 = attr2
        ...
obj = MyClass()
obj.my_method1(val1) # <-- attr1 が作成される
obj.my_method2(val2) # <-- attr2 が作成される

コンストラクタでの属性

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

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

ベストプラクティス

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

ベストプラクティス

1. 属性は __init__() で初期化
2. 命名

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

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

ベストプラクティス

1. 属性は __init__() で初期化
2. 命名

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

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

ベストプラクティス

1. 属性は __init__() で初期化
2. 命名

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

3. selfself
4. ドキュストリングを使用
class MyClass:
    """このクラスは何もしない"""
    pass
Python によるオブジェクト指向プログラミング

¡Vamos a practicar!

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

Preparing Video For Download...