内建属性

常用的专有属性:

__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__这个方法

 

posted @ 2019-05-23 23:07  搭欣者  阅读(201)  评论(0)    收藏  举报