常用的专有属性:
__init__构造初始化函数
__new__生成实例所需属性
__class__实例所在的类
__str___实例字符串表示,可读性
__repr__实例字符串表示,准确性
__del__析构
__dict__实例自定义属性
__doc__类文档,子类不继承
__getattribute__属性访问拦截器,在__getattribute__方法中禁止使用self.xxx(方法和属性)
__basses__类的所有父类构成元素
__getattribute__的使用方法:
1 class Itcast(object): 2 def __init__(self,subject1): 3 self.subject1 = subject1 4 self.subject2 = ‘cpp‘ 5 #属性访问时拦截器,打log 6 def __getattribute__(self,obj): 7 print("====1>%s"%obj) 8 if obj == "subject1": 9 print("log subject1") 10 return ‘redirect python"‘ 11 else:#注释掉这2行,将找不到subject2 12 temp = object.__getattribute__(self,obj) 13 print("====2>%s"%str(temp)) 14 return temp 15 def show (self): 16 print(‘this is Itcast‘) 17 s = Itcast("python") 18 print(s.subject1) 19 print(s.subject2) 20 s.show() 21 #先获取show属性对应的结果,,,,应该是一个方法 22 #方法()
1 class Person(object): 2 def __getattribute__(self,obj): 3 print("...test...") 4 if obj.startswith("a"): 5 return "hahha" 6 else: 7 return self.test 8 def test(self): 9 print("heihei ") 10 11 t = Person() 12 t.a 13 t.b#是一个坑,程序将一直执行__getattribute__访问一个对象的属性,一定先执行__getattribute__这个方法
原文:https://www.cnblogs.com/daxinzhe/p/10915228.html