__setattr__、__delattr__ および_getattr__


setattr、
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__がトリガーされます.