赞
踩
__call__(self,[,args...]) :允许实例像函数一样执行
- class Student():
- __number = 100
- def __init__(self,name,age):
- self.name = name
- self.age = age
- def __call__(self,name,age):
- print(name,age)
- studentA = Student('Jack',18)
- studentA("hello","world") # studentA.__call__("hello","world")
__len__(self):实例对象被len()函数调用时,执行此函数
- class Student():
- def __init__(self,name,age):
- self.name = name
- self.age = age
- def __len__(self):
- print('访问实例对象的长度')
- return 100
- studentA = Student('Jack',18)
- print(len(studentA))
-
- # 访问实例对象的长度
- # 100
__getattr__(self,attr): 访问实例的属性不存在时,执行此函数,并将函数返回结果作为不存在属性的值
- class Student():
- __number = 100
- def __init__(self,name,age):
- self.name = name
- self.age = age
- def __getattr__(self,attr):
- print(attr + "不存在")
- return '不能确定性别'
- studentA = Student('Jack',18)
- print(studentA.sex)
- print(studentA.name)
-
-
- # sex不存在
- # 不能确定性别
- # Jack

__getattribute__(self,attr):访问实例的属性时,不管实例的属性是否存在,都会执行该函数,函数的返回值就是属性的值
__getattribute__()执行,就不会执行__getattr__(self,attr)
- class Student():
- __number = 100
- def __init__(self,name,age):
- self.name = name
- self.age = age
- def __getattr__(self,attr):
- print(attr + "不存在")
- return '不能确定性别'
- def __getattribute__(self,attr):
- print('正在访问实例的'+ attr)
- return 'man'
- studentA = Student('Jack',18)
- print(studentA.sex)
- print(studentA.name)
-
- # 正在访问实例的sex
- # man
- # 正在访问实例的name
- # man

__setattr__(self,attr,value): 给实例的属性赋值的动作,就是执行该函数
- class Student():
- def __init__(self,name,age):
- self.name = name
- self.age = age
- def __setattr__(self,attr,value):
- print(attr,value)
- return 100
- def __getattr__(self,attr):
- print(attr + '属性不存在')
- studentA = Student('Jack',18)
- studentA.score = 90 # 等价于 studentA.__setattr__(self,'score',90)
- print(studentA.name)
-
- # name Jack
- # age 18
- # score 90
- # name属性不存在
- # None

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。