元类编程之前先学习两个魔法函数
# __getattr__ 和__getattribute__魔法函数
# __getattr__ 查找不到属性的时候调用
# __getattribute__
from datetime import date
class User:
def __init__(self, name, birthday,info={
}):
self.name = name
self.birthday = birthday
self.info = info
# 在查找不到属性的时候调用
def __getattr__(self, item):
# print('attribute not find')
# print(item)
# return 'attribute not find'
return self.info[item]
# return self.info.get(item)
# __getattribute__在__getattr__之前执行 不轻易去重写
# def __getattribute__(self, item):
# return 'juran'
# 打印没有反回值的函数返回None
# def demo(): pass
# print(demo()) # None
if __name__ == '__main__':
# 1990-1-1
user = User('ellen', date(year=1990, month=1, day=1),info={
'age':18})
# print(user.name)
print(user.age) # 18
#print(user.birthday)
属性描述符
class User(object):
def __init__(self, age):
self.age = age
def get_age(self):
return self.age
def set_age(self