实现可切片的对象

import numbers
class Group:
    #支持切片操作
    def __init__(self, group_name, company_name, staffs):
        self.group_name = group_name
        self.company_name = company_name
        self.staffs = staffs

    def __reversed__(self):   # 魔法函数,反转,外部可以通过reversed方法对此对象进行操作
        self.staffs.reverse()

    def __getitem__(self, item):  # 魔法函数 切片,外部可以通过切片的方法对此对象进行操作
        cls = type(self)
        if isinstance(item, slice):
            return cls(group_name=self.group_name, company_name=self.company_name, staffs=self.staffs[item])
        elif isinstance(item, numbers.Integral):
            return cls(group_name=self.group_name, company_name=self.company_name, staffs=[self.staffs[item]])

    def __len__(self):  # 魔法函数 len,外部可以通过len计算此对象
        return len(self.staffs)

    def __iter__(self):  # 让此对象 可以被迭代
        return iter(self.staffs)

    def __contains__(self, item):  # 可以通过if in 判断对象是否包含xxx
        if item in self.staffs:
            return True
        else:
            return False

staffs = ["bobby1", "imooc", "bobby2", "bobby3"]
group = Group(company_name="imooc", group_name="user", staffs=staffs)
reversed(group)
for user in group:
    print(user)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容