#特殊方法 class Foo(object): def __init__(self,a1,a2): self.a1 = a1 self.a2 = a2 def __call__(self, *args, **kwargs): print(11111,args,kwargs) return 123 def __getitem__(self, item): print(item) return 8 def __setitem__(self, key, value): print(key,value,111111111) def __delitem__(self, key): print(key) def __add__(self, other): return self.a1 + other.a2 def __enter__(self): print('1111') return 999 #返回值给 f def __exit__(self, exc_type, exc_val, exc_tb): print('22222') # 1. 类名() 自动执行 __init__ obj = Foo(1,2) # 2. 对象() 自动执行 __call__ ret = obj(6,4,2,k1=456) # 3. 对象['xx'] 自动执行 __getitem__ ret = obj['yu'] print(ret) # 4. 对象['xx'] = 11 自动执行 __setitem__ obj['k1'] = 123 # 5. del 对象[xx] 自动执行 __delitem__ del obj['uuu'] # 6. 对象+对象 自动执行 __add__ obj1 = Foo(1,2) obj2 = Foo(88,99) ret = obj2 + obj1 print(ret) # 7. with 对象 自动执行 __enter__ / __exit__ obj = Foo(1,2) with obj as f: #__enter__的返回值给f print(f) print('内部代码') # 8. 真正的构造方法 class Foo(object): def __init__(self, a1, a2): # 初始化方法 self.a1 = a1 self.a2 = a2 def __new__(cls, *args, **kwargs): # 构造方法 """ 开辟一个内存空间,空对象 """ return object.__new__(cls) # Python内部创建一个当前类的对象(初创时内部是空的.). obj1 = Foo(1,2) print(obj1) obj2 = Foo(11,12) print(obj2)
class ff:
def __new__(cls, *args, **kwargs): print('new') return object.__new__(cls) def __init__(self,name): self.name=name print('init') def __iter__(self): return [9,8,7,6]
def __str__(self):
return 'ff的对象'
#9.对象.__dict__ 获取对象所有的属性 print(obj3.__dict__) #10.对象.__iter__() #获取迭代器,在类中写此方法可以使对象变为可迭代对象 for el in obj3.__iter__(): print(el) #11.改写__str__()方法 print(obj3)
#分页 方法1 class Pager: def __init__(self, lst, pageSize): self.lst = lst self.pageSize = pageSize def start(self): # 1 return self.__zhiding(1) def end(self): # 最后一页 return self.__zhiding(self.totle) def index(self): # 指定某一页 page = int(input("请输入你要显示的页码:")) return self.__zhiding(page) def __zhiding(self, page): return self.lst[self.pageSize * (page - 1): self.pageSize * page] @property def totle(self): totle = 0 if len(self.lst)%self.pageSize == 0: totle = len(self.lst)//self.pageSize else: totle = len(self.lst) // self.pageSize + 1 return totle p = Pager([i for i in range(20000)], 100) print(p.end()) print(p.index()) #分页 方法2 #pagesize是每页的数据个数 #lst是总数据的列表 class Page: @property def start(self): #开始的索引 return (self.index-1)*self.pagesize @property def end(self):#结束的索引 return self.index*self.pagesize @property def total(self):#总页数 if len(self.lst)%self.pagesize==0: return len(self.lst)//self.pagesize else: return len(self.lst)//self.pagesize +1 def __init__(self,pagesize=10): self.lst=[] #总数据 self.pagesize=pagesize #每页的数据 self.index=None #要展示的页码 def page(self): #选择展示页码的方法 p=input('请输入你要查询的数据的页码,按Q退出:') if p.upper() == 'Q': return 0 if int(p)<=self.total: self.index=int(p) return 1 else: return 2 def show(self):#展示的方法 for i in range(self.start,self.end): print(self.lst[i]) def makeData(self):#产生数据的方法 for i in range(20000): self.lst.append('测试数据第%s条'%i) def run(self):#主程序 self.makeData() while 1: fanhuizhi=self.page() if fanhuizhi==0: break elif fanhuizhi==1: self.show() elif fanhuizhi==2: print('输入页码超范围,请重新输入') if __name__=='__main__':
objt=Page()
objt.run()