当前位置:   article > 正文

Python魔法

Python魔法

__call__(self,[,args...]) :允许实例像函数一样执行

  1. class Student():
  2. __number = 100
  3. def __init__(self,name,age):
  4. self.name = name
  5. self.age = age
  6. def __call__(self,name,age):
  7. print(name,age)
  8. studentA = Student('Jack',18)
  9. studentA("hello","world") # studentA.__call__("hello","world")

__len__(self):实例对象被len()函数调用时,执行此函数

  1. class Student():
  2. def __init__(self,name,age):
  3. self.name = name
  4. self.age = age
  5. def __len__(self):
  6. print('访问实例对象的长度')
  7. return 100
  8. studentA = Student('Jack',18)
  9. print(len(studentA))
  10. # 访问实例对象的长度
  11. # 100

__getattr__(self,attr): 访问实例的属性不存在时,执行此函数,并将函数返回结果作为不存在属性的值

  1. class Student():
  2. __number = 100
  3. def __init__(self,name,age):
  4. self.name = name
  5. self.age = age
  6. def __getattr__(self,attr):
  7. print(attr + "不存在")
  8. return '不能确定性别'
  9. studentA = Student('Jack',18)
  10. print(studentA.sex)
  11. print(studentA.name)
  12. # sex不存在
  13. # 不能确定性别
  14. # Jack

__getattribute__(self,attr):访问实例的属性时,不管实例的属性是否存在,都会执行该函数,函数的返回值就是属性的值

__getattribute__()执行,就不会执行__getattr__(self,attr)

  1. class Student():
  2. __number = 100
  3. def __init__(self,name,age):
  4. self.name = name
  5. self.age = age
  6. def __getattr__(self,attr):
  7. print(attr + "不存在")
  8. return '不能确定性别'
  9. def __getattribute__(self,attr):
  10. print('正在访问实例的'+ attr)
  11. return 'man'
  12. studentA = Student('Jack',18)
  13. print(studentA.sex)
  14. print(studentA.name)
  15. # 正在访问实例的sex
  16. # man
  17. # 正在访问实例的name
  18. # man

__setattr__(self,attr,value): 给实例的属性赋值的动作,就是执行该函数

  1. class Student():
  2. def __init__(self,name,age):
  3. self.name = name
  4. self.age = age
  5. def __setattr__(self,attr,value):
  6. print(attr,value)
  7. return 100
  8. def __getattr__(self,attr):
  9. print(attr + '属性不存在')
  10. studentA = Student('Jack',18)
  11. studentA.score = 90 # 等价于 studentA.__setattr__(self,'score',90)
  12. print(studentA.name)
  13. # name Jack
  14. # age 18
  15. # score 90
  16. # name属性不存在
  17. # None

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/890201
推荐阅读
相关标签
  

闽ICP备14008679号