Python3 实现自定义对象的切片,__getitem__方法

如果实现了一个对象,它包含列表或自定义数据结构,如何对它进行切片呢?

首先,定义自定义数据结构类

Python
# -*- coding: utf-8 -*- __author__ = 'songhao' from collections import Sequence class MyList(Sequence): """ 实现 Mylist 基本操作,删除,添加,切片,返回值 """ def __init__(self, data): self.data = data def __str__(self): return str(self.data) def __repr__(self): return str(self.data) def __len__(self): return len(self.data) def append(self, item): self.data.append(item) def remove(self, item): self.data.remove(item) def __<span class="wp_keywordlink_affiliate"><a href="https://www.168seo.cn/tag/getitem" title="View all posts in getitem" target="_blank">getitem</a></span>__(self, sliced): return self.data[sliced] if __name__ == '__main__': my = MyList([1, 2, 3]) print(my) my.append("heloo") my.remove(3) print(my) print(my[-1])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# -*- coding: utf-8 -*-
__author__ = 'songhao'
 
from collections import Sequence
 
 
class MyList ( Sequence ) :
     """
    实现 Mylist 基本操作,删除,添加,切片,返回值
    """
     def __init__ ( self , data ) :
         self . data = data
 
     def __str__ ( self ) :
         return str ( self . data )
 
     def __repr__ ( self ) :
         return str ( self . data )
 
     def __len__ ( self ) :
         return len ( self . data )
 
     def append ( self , item ) :
         self . data . append ( item )
 
     def remove ( self , item ) :
         self . data . remove ( item )
 
     def __getitem__ ( self , sliced ) :
         return self . data [ sliced ]
 
 
if __name__ == '__main__' :
     my = MyList ( [ 1 , 2 , 3 ] )
     print ( my )
     my . append ( "heloo" )
     my . remove ( 3 )
     print ( my )
     print ( my [ - 1 ] )

结果是:

这里声明了一个类,它包含了一个作为数据结构的列表。MyStructure实际上没有实现太多内容,但已经可以添加、删除、获取项了。要留意的是__getitem__方法。任何时候需要从结构中获取一个项时都可以调用此方法。当调用structure[0]时,实际上调用的时__getitem__方法,并返回该方法所返回的内容。在实现列表样式的对象时,这是很有用的。

现在创建自定义对象,添向其中添加一个项:

Python
In [1]: from c4 import MyList In [2]: m = MyList([1,2,3]) In [3]: m Out[3]: <c4.MyList at 0x10ca39da0> In [4]: m.append(2222) In [5]: print(m) [1, 2, 3, 2222] In [6]: m.remove(1) In [7]: m[-1] Out[7]: 2222 In [10]: m[:3] Out[10]: [2, 3, 2222] 很简单 实现了切片的操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
In [ 1 ] : from c4 import MyList
 
In [ 2 ] : m = MyList ( [ 1 , 2 , 3 ] )
 
In [ 3 ] : m
Out [ 3 ] : < c4 . MyList at 0x10ca39da0 >
 
In [ 4 ] : m . append ( 2222 )
 
In [ 5 ] : print ( m )
[ 1 , 2 , 3 , 2222 ]
 
In [ 6 ] : m . remove ( 1 )
 
In [ 7 ] : m [ - 1 ]
Out [ 7 ] : 2222
 
In [ 10 ] : m [ : 3 ]
Out [ 10 ] : [ 2 , 3 , 2222 ]
 
很简单 实现了切片的操作



  • zeropython 微信公众号 5868037 QQ号 5868037@qq.com QQ邮箱
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值