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__)