PHP网站开发与管理设计心得,wordpress上传模板,flash 网站设计,好的网站制作实现授权的关键点就是覆盖__getattr__()方法#xff0c;在代码中包含一个对getattr()内建函数的调用。
特别调用getattr()以得到默认对象属性#xff08;数据属性或者方法#xff09;并返回它以便访问或调用。
特殊方法__getattr__()的工作方式是#xff0c;当搜索一个属性…实现授权的关键点就是覆盖__getattr__()方法在代码中包含一个对getattr()内建函数的调用。
特别调用getattr()以得到默认对象属性数据属性或者方法并返回它以便访问或调用。
特殊方法__getattr__()的工作方式是当搜索一个属性时任何局部对象首先被找到定制的对象。如果搜索
失败了则__getattr__()会被调用然后调用getattr()得到一个对象默认行为。
当引用一个属性时解释器将试着在局部名称空间中查找那个名字比如一个自定义的方法或局部实例属性。
如果没有在局部字典中找到则搜索类名名称空间以防一个类属性被访问。最后如果两类搜索都失败了
搜索则对原对象开始授权请求此时__getattr__()会被调用。
授权也是一种包装关键点是覆盖__getattr__方法
基于基本类型定制自己的类型
import time
class FileHandle:
def __init__(self,filename,moder,encodingutf-8):
# self.filenamefilename
self.fileopen(filename,mode,encodingencoding) #组合
self.modemode
self.encodingencoding
def write(self,line):
print(------------,line)
ttime.strftime(%Y-%m-%d %X)
self.file.write(%s %s %(t,line))
def __getattr__(self, item):
# print(item,type(item))
# self.file.read
return getattr(self.file,item)
f1FileHandle(a.txt,w)
# print(f1.file)
# print(f1.__dict__)
# print(,f1.read) #触发__getattr__
# print(f1.write)
f1.write(1111111111111111\n)
f1.write(cpu负载过高\n)
f1.write(内存剩余不足\n)
f1.write(硬盘剩余不足\n)
# f1.seek(0)
# print(---,f1.read())
包装
二次加工标准类型包装继承加派生实现
class List(list):
def append(self, p_object):
if type(p_object) is str:
# self.append(p_object) #导致无限递归
super().append(p_object)
else:
print(只能添加字符串类型)
def show_midlle(self):
mid_indexint(len(self)/2)
return self[mid_index]
# l2list(hell oworld)
# print(l2,type(l2))
l1List(helloworld)
# print(l1,type(l1))
# print(l1.show_midlle())
l1.append(1111111111111111111111)
l1.append(SB)
print(l1)