types.MethodType
を使う
types.MethodType(function, instance)
Create a bound instance method object.
バウンドされたインスタンスメソッドを作成します
動作環境
Python 3.7.1
特定のインスタンスにだけメソッドを追加する
class MyClass:
def __init__(self, name):
self._name = name
a = MyClass('tamago')
b = MyClass('taro')
b
のインスタンスにだけメソッドを追加したい場合、types.MethodType()
でb
に紐づくインスタンスメソッド(get_name
)を生成し、b.get_name
に設定する
# 関数を定義
>>> def get_name(self):
... return self._name
>>> import types
# bのインスタンスメソッドを生成し、設定する
>>> b.get_name = types.MethodType(get_name, b)
>>> b.get_name()
'taro'
また、a
にはget_name
というメソッドは無いため、エラーになる
>>> a.get_name()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'MyClass' object has no attribute 'get_name'
'MyClass' object has no attribute 'get_name'
面白い