# 魔法函数是python解释器内部使用的方法,是整个python动态特性的最根本原因。
# __getattr__与__getattribute__的区别:
# __getattr__在查找不到属性的时候调用
from datetime import date,datetime
class User:
def __init__(self,name,birthday):
self.name = name
self.birthday = birthday
if __name__ == "__main__":
user = User("Tom", date(year=1987, month=1, day=1)) # date 接收三个参数,year/month/day
print(user.age) # 此处调用一个不存在的age属性,执行会报告 AttributeError: 'User' object has no attribute 'age'
# 魔法函数是python解释器内部使用的方法,是整个python动态特性的最根本原因。
# __getattr__与__getattribute__的区别:
# __getattr__在查找不到属性的时候调用
from datetime import date,datetime
class User:
def __init__(self,name,birthday):
self.name = name
self.birthday = birthday
def __getattr__(self,item): # 只有当调用一个无法查找到的属性时,才会调用__getattr__
return "not find attr"
if __name__ == "__main__":
user = User("Tom", date(year=1987, month=1, day=1)) # date 接收三个参数,year/month/day
print(user.age) # 调用不存在的age属性时,程序并没有报错,而是调用魔法函数__getattr__,报告not find attr
print(user.name) # 执行该语句时,则不会进入__getattr__,直接返回查找到的结果 Tom
# 魔法函数是python解释器内部使用的方法,是整个python动态特性的最根本原因。
# __getattr__与__getattribute__的区别:
# __getattr__在查找不到属性的时候调用
from datetime import date,datetime
class User:
def __init__(self,name,birthday):
self.Name = name # 假设这里写错,将self.name 写成self.Name
self.birthday = birthday
def __getattr__(self,item): # 只有当调用一个无法查找到的属性时,才会调用__getattr__
return self.Name
if __name__ == "__main__":
user = User("Tom", date(year=1987, month=1, day=1)) # date 接收三个参数,year/month/day
print(user.name) # 执行该语句时,会进入__getattr__,完成代码的纠错,返回查找到的结果 Tom
# 魔法函数是python解释器内部使用的方法,是整个python动态特性的最根本原因。
# __getattr__与__getattribute__的区别:
# __getattr__在查找不到属性的时候调用
from datetime import date,datetime
class User:
def __init__(self,name,birthday,info={}): # 假设此处还需要传入一个dict,用户更详细的信息
self.name = name # 假设这里写错,将self.name 写成self.Name
self.birthday = birthday
self.info = info
def __getattr__(self,item): # 只有当调用一个无法查找到的属性时,才会调用__getattr__
return self.info[item] # 如果没有此处定义,调用会出错
if __name__ == "__main__":
user = User("Tom", date(year=1987, month=1, day=1),info={"company_name":"ABC"}) # date 接收三个参数,year/month/day
print(user.company_name) # 执行该语句时,会进入__getattr__,返回调用的value ABC
# 魔法函数是python解释器内部使用的方法,是整个python动态特性的最根本原因。
# __getattr__与__getattribute__的区别:
# __getattr__在查找不到属性的时候调用
from datetime import date,datetime
class User:
def __init__(self,info={}): # 假设此处还需要传入一个dict,用户更详细的信息
self.info = info
# def __getattr__(self,item): # 只有当调用一个无法查找到的属性时,才会调用__getattr__
# return self.info[item] # 如果没有此处定义,调用会出错
if __name__ == "__main__":
user = User(info={"company_name":"ABC","name":"CDE"}) # date 接收三个参数,year/month/day
print(user.name) # 执行会报错,AttributeError: 'User' object has no attribute 'name'
# 魔法函数是python解释器内部使用的方法,是整个python动态特性的最根本原因。
# __getattr__与__getattribute__的区别:
# __getattr__在查找不到属性的时候调用
from datetime import date,datetime
class User:
def __init__(self,info={}): # 假设此处还需要传入一个dict,用户更详细的信息
self.info = info
def __getattr__(self,item): # 只有当调用一个无法查找到的属性时,才会调用__getattr__
return self.info[item] # 如果没有此处定义,调用会出错
if __name__ == "__main__":
user = User(info={"company_name":"ABC","name":"CDE"}) # date 接收三个参数,year/month/day
print(user.name) # 有了魔法函数的处理逻辑,此处即可以返回查询结果 CDE'
# 魔法函数是python解释器内部使用的方法,是整个python动态特性的最根本原因。
# __getattr__与__getattribute__的区别:
# __getattr__在查找不到属性的时候调用
# __getattribute__: 只要用self.xxx 访问,首先进入的就是__getattribute__,无条件的进入该函数
from datetime import date,datetime
class User:
def __init__(self,info={}): # 假设此处还需要传入一个dict,用户更详细的信息
self.info = info
def __getattr__(self,item): # 只有当调用一个无法查找到的属性时,才会调用__getattr__
return self.info[item] # 如果没有此处定义,调用会出错
def __getattribute__(self,item): # 该方法,能不重写,最后不要重写。否则后患无穷
return "test"
if __name__ == "__main__":
user = User(info={"company_name":"ABC","name":"CDE"}) # date 接收三个参数,year/month/day
print(user.test) # 调用一个不存在的属性,也无条件进入__getattribute__,返回 test