property

将对象的方法伪装成属性

property与__setattr___setiterm_

class Foo:
    @property
    def AAA(self):
        print("get 的时候运行")

    @AAA.setter
    def AAA(self,value):
        print("set 的时候运行")
    @AAA.deleter
    def AAA(self):
        print("delet 的时候运行")

a = Foo()
a.AAA
a.AAA = "summer"
del a.AAA

get 的时候运行
set 的时候运行
delet 的时候运行
class Bar():
    def __getattr__(self, item):
        print("get 不到的时候运行")

    def __setattr__(self, key, value):
        print("通过属性set的时候运行")

    def __delattr__(self, item):
        print("通过属性delete的时候运行")
b = Bar()
b.name
b.name = "summer"
del b.name

get 不到的时候运行
通过属性set的时候运行
通过属性delete的时候运行
class F:
    def __getitem__(self, item):
        print("通过字符串get的时候运行")

    def __setitem__(self, key, value):
        print("通过字符串set的时候运行")

    def __delitem__(self, key):
        print("通过字符串删除的时候执行")
c = F()
c["name"]
c["name"] = "summer"
del c["name"]
通过字符串get的时候运行
通过字符串set的时候运行
通过字符串删除的时候执行
原文地址:https://www.cnblogs.com/xiayuhao/p/9544448.html