python内建属性
-
属性拦截器-1
class Itcast(object): def __init__(self,subject1): self.subject1 = subject1 self.subject2 = 'cpp' #属性访问时拦截器,打log def __getattribute__(self,obj): #obj --> 'subject1' if obj == 'subject1': print("log subject1") return 'redirect python' else: return object.__getattribute__(self,obj) def show(self): print('this is Itcast') s = Itcast('python') print(s.subject1) #这句话执行时 将 subject1 当做 'subject1' 传递给 obj print(s.subject2) s.show() # 运行结果 log subject1 redirect python cpp this is Itcast
-
属性拦截器-2
#有了__getattribute__ 不管你是访问属性 还是方法 都会先执行__getattribute__这个方法 #其实方法就是 属性 列 def show(self): 其实是 属性show 指向了这个方法的地址 #在__getattribute__ 这个方法下面 静止使用 self.方法或则属性 class Itcast(object): def __init__(self,subject1): self.subject1 = subject1 self.subject2 = 'cpp' #属性访问时拦截器,打log def __getattribute__(self,obj): #obj --> 'subject1' print("===1>%s"%obj) if obj == 'subject1': print("log subject1") return 'redirect python' else: temp = object.__getattribute__(self,obj) print("===2>%s"%str(temp)) return temp def show(self): print('this is Itcast') s = Itcast('python') print(s.subject1) #这句话执行时 将 subject1 当做 'subject1' 传递给 obj print(s.subject2) s.show() #用show得到那片内存的地址 然后用show掉它 #1.先获取show属性对应的结果,,,,应该是一个方法 #2.方法() # 运行结果 ===1>subject1 log subject1 redirect python ===1>subject2 ===2>cpp cpp ===1>show ===2><bound method Itcast.show of <__main__.Itcast object at 0x1019e5588>> this is Itcast
-
常用专有属性
常用专有属性 说明 触发方式 __init__ 构造初始化函数 创建实列后,赋值时使用,在__new__后 __new__ 生成实列所需属性 创建实列时 __class__ 实列所在的类 实列.__class__ __str__ 实列字符串表示,可读性 print(类实列),如没实现,使用repr结果 __repr__ 实列字符串表示,标准性 类实列 回车 或者 print(repr(类实列)) __del__ 析构 del删除实列 __dict__ 实列自定义属性 vars(实列.__dict__) __doc__ 类文档,子类不继承 help(类或实列) __getattribute__ 属性访问拦截器 访问实列属性时 __bases__ 类的所有父类构造属性 类名.__bases__