pythonクラス_dict__ 割り当て時の使用
2711 ワード
栗を挙げます.
test 1は簡単なクラスです.まずこのクラスを初期化し、辞書でクラスのインスタンスに値を割り当てると、面白いところが見つかります.
In[13]から,元のクラスの属性にselfが定義されていないことが分かる.c,しかし,付与によりインスタンスxにはx.c属性があるが,x.bは消失する.次の[17],[18]から,インスタンスの属性が再付与され,一部の属性が削除されることが分かるが,これは等号の後のdictにどのkeyがあるかに依存する.
インスタンスのプロパティを追加し、既存のプロパティを変更したい場合は、辞書のupdate関数を使用して実装できます.
これにより、インスタンス自体にx.a属性がある場合、x.a=3 x.c=4
class test1(object):
def __init__(self):
self.a = 1
self.b = 2
test 1は簡単なクラスです.まずこのクラスを初期化し、辞書でクラスのインスタンスに値を割り当てると、面白いところが見つかります.
In [12]: x.__dict__
Out[12]: {'a': 1, 'b': 2}
In [13]: x.__dict__ = {'a':3, 'c':4}
In [14]: x
Out[14]: <__main__.test1 at="" class="hljs-number">0xaf29080>
In [15]: x.__dict__
Out[15]: {'a': 3, 'c': 4}
In [16]: x.c
Out[16]: 4
In [17]: x.__dict__ = {'a':3, 'c':4, 'b':5}
In [18]: x.__dict__
Out[18]: {'a': 3, 'b': 5, 'c': 4}
In[13]から,元のクラスの属性にselfが定義されていないことが分かる.c,しかし,付与によりインスタンスxにはx.c属性があるが,x.bは消失する.次の[17],[18]から,インスタンスの属性が再付与され,一部の属性が削除されることが分かるが,これは等号の後のdictにどのkeyがあるかに依存する.
インスタンスのプロパティを追加し、既存のプロパティを変更したい場合は、辞書のupdate関数を使用して実装できます.
x.__dict__.update({'a':3, 'c':4})
これにより、インスタンス自体にx.a属性がある場合、x.a=3 x.c=4