16.双下划线开头的attr方法

2019-06-03  本文已影响0人  一枼落知天下
"""

__delattr__

__setattr__

# 属性不存在的时候,会调用
__getattr__

"""

class Foo:
    
    def __init__(self,name):
        self.name = name

    # 自定义获取属性过程
    def __getattr__(self,item):
        print('====>属性[%s]不存在!'%item)

    # 自定义设置属性过程
    def __setattr__(self,key,value):
        print("执行__setattr__",key,value)
        if type(value) is str:
            print("开始设置")
            # 进入死循环
            # self.key = value => __setattr__ => 
            # self.key = value => __setattr__ => 
            self.__dict__[key] = value
        else:
            print("必须是字符串类型")

    # 自定义删除属性过程
    def __delattr__(self,item):
        print('不允许删除属性[%s]!'%item)
        # del self.item 
        # print("执行__delattr__")
        # self.__dict__.pop(item)

# print(Foo.__dict__)
# print(dir(Foo))

f = Foo("Jhou")
f.age  #调用 __getattr__
f.sex = "女"
del f.name
print(f.__dict__)

上一篇下一篇

猜你喜欢

热点阅读