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
  • 相关阅读:
    spymemcache与spring结合
    Turtle库的学习积累
    汉诺塔绘图学习
    计算圆周率π和显示进度条
    川菜 in English
    一些必不可少的Sublime Text 2插件 钟磊的专栏 博客频道 CSDN.NET
    \usepackage{natbib}在latex模板写作中的心得_格致轩_百度空间
    Geant4新版本:新安装方法,新运行方式
    ubuntu系统备份
    Latex数学公式中的空格
  • 原文地址:https://www.cnblogs.com/yc3110/p/10448772.html
Copyright © 2011-2022 走看看