__setattr__、__delattr__ および_getattr__
setattr、
delattrと
getattr
delattrと
getattr
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
class People():
"""A simple attempt to model a people."""
def __init__(self, name, age):
"""Initialize name and age attributes."""
self.name = name
self.age = age
def __setattr__(self, key, value):
print("=--setattr-->")
print("%s:%s" % (key, value))
self.__dict__[key] = value
def __delattr__(self, item):
print("=--delattr-->")
print("delattr: %s" % (item))
self.__dict__.pop(item)
def __getattr__(self, item):
print("=--getattr-->")
print("getattr: %s" % (item))
print(item, type(item))
print()
qiang = People('qiang', 16)
print(qiang.__dict__)
print()
yong = People('yong', 19)
print(yong.__dict__)
print()
del qiang.name
print(qiang.__dict__)
print()
del yong.age
print(yong.__dict__)
print()
print(yong.beauty)
print()
yong.__delattr__("name")
print(yong.__dict__)
print()
qiang.__setattr__("age", 99)
print(qiang.__dict__)
/usr/bin/python2.7 /home/strong/git_workspace/MonoGRNet/test.py --train_batch_size 64 --is_train False --gpus 0
=--setattr-->
name:qiang
=--setattr-->
age:16
{'age': 16, 'name': 'qiang'}
=--setattr-->
name:yong
=--setattr-->
age:19
{'age': 19, 'name': 'yong'}
=--delattr-->
delattr: name
{'age': 16}
=--delattr-->
delattr: age
{'name': 'yong'}
=--getattr-->
getattr: beauty
beauty
None
=--delattr-->
delattr: name
{}
=--setattr-->
age:99
{'age': 99}
Process finished with exit code 0
__serattr__
:オブジェクトのプロパティを設定するとトリガーされます.たとえば、self.name = name
では、何回かの割り当てが実行をトリガーします.__delattr__
:オブジェクトのプロパティが削除されるとトリガーされます.たとえば、del qiang.name
です.__getattr__
:この組み込みメソッドは特殊で、オブジェクトのプロパティが存在しない場合に__getattr__
がトリガーされます.