• 特殊方法,类之间的关系,分页


     

    #特殊方法
    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()
  • 相关阅读:
    AudioToolbox学习(转)
    ios5键盘问题
    何时使用self.
    ios判断邮箱,手机号码,车牌号是否合法(正则表达)
    将图片重新绘制
    在UITableViewCell中获取所在的行数以及去除选中状态
    根据UIView获取其UIViewController
    在iOS中将string转成UTF8编码
    SQL提高性能
    oracle创建口令文件
  • 原文地址:https://www.cnblogs.com/PythonMrChu/p/9720471.html
Copyright © 2020-2023  润新知