zoukankan      html  css  js  c++  java
  • 创建可序列化,可切片化对象

      创建一个可切片类

    class Group(object):
        def __init__(self, group_name, company_name, staffs):
            self.goup_name = group_name
            self.conpany_name = company_name
            self.staffs = staffs
        def __reversed__(self):
            pass
        def __getitem__(self, item): #实现切片的关键魔法函数
            return self.staffs[item]
        def __len__(self):
            pass
        def __iter__(self):
            pass
        def __contains__(self, item):
            pass
    staffs = ['frank', 'bob', 'tom', 'jerry']
    group = Group(group_name='user', company_name='imocc', staffs=staffs)
    sub_group = group[:2]
    print(sub_group)

     最后一行做调试如下:

    类中因为实现了__getitem__()方法,可以看到对类的实例group对象切片操作之后,返回list类型的sub_group(),但是如果想使得切片之后的对象的话还是一个Group()则需要更改__getitem__()如何更改呢?我们需要了解其参数item是如何传递进来的。

    以(def __getitem__(self, item): #实现切片的关键魔法函数)行作为调试点调试,

    实际上传递的参数就是一个slice(切片)对象,同时如果将倒数第二句代码改为sub_group = group[0]可以通过调试看到传递的item就是一个整数。于是可以完善Group()类。通过编辑__len__使之可用len()方法,通过完善__contain__使之可判断item in Group():

      

    import numbers
    class Group(object):
        def __init__(self, group_name, company_name, staffs):
            self.goup_name = group_name
            self.conpany_name = company_name
            self.staffs = staffs
        def __reversed__(self):
            pass
        def __getitem__(self, item): #实现切片的关键魔法函数
            cls = type(self) #创建一个新的Group()对象。
            if isinstance(item, slice):
                return cls(group_name=self.goup_name, company_name=self.conpany_name, staffs=staffs[item])
            if isinstance(item, numbers.Integral):
                return cls(group_name=self.goup_name, company_name=self.conpany_name, staffs=self.staffs[item])
        def __len__(self):
            return len(self.staffs)
        def __contains__(self, item):
            if item in self.staffs:
                return True
            else:
                return False
  • 相关阅读:
    POJ
    服务器端控件的属性
    生成验证码的代码
    无法检测到的代码原因
    Jquery获取服务器端控件的三种方式
    hdu-2421 Deciphering Password 数学姿势
    KM算法 带权二分匹配 O(n^3)
    hdu-3966 Aragorn's Story 树链剖分
    头文件
    输入外挂
  • 原文地址:https://www.cnblogs.com/yc3110/p/10448772.html
Copyright © 2011-2022 走看看