Python中__getitem__()方法和索引器[]的详细用法


在本文中将详细描述如何使用Python为自定义对象使用索引器和类的__getitem__()方法;

索引器

在Python中,可使用索引器运算符[ ]来访问对象元素,例如字典 mydict['name']

mydict['name'] 大致等同于 mydict.__getitem__('name')

python允许你将任何对象传递到索引器中,例如:

test[5] #int 类型
test[2:10:-1] #切片
test[1:'string':object()] #任意类型的切片
test['name'] #字符串
test[123,'name',object,1,2,3,4,5] #任意数量、类型的参数

当传递给索引器的参数不止一个时,那么这些参数会被隐式的转换成元组;

比如 test[1,'name'] 等同于 test[(1,'name')];而切片 test[1:2:3] 等同于 test[slice(1,2,3)]

__getitem__()方法

任意类都可为其定义 __getitem__() 方法,该方法应定义一个参数用于接收传入到索引器的值;

该方法应返回一个值,省略则返回None;

示例代码

class Demo:

    def __getitem__(self,items):
        print(type(items),'---',items)
        if type(items) == int:
            return 123*2

test = Demo()

test[123]
test[1:10:-1]
test[345:"hello":object]
test[1,2,3,4,5,"string",print]
print("返回值为:",test[123])

程序输出

<class 'int'> --- 123
<class 'slice'> --- slice(1, 10, -1)
<class 'slice'> --- slice(345, 'hello', <class 'object'>)
<class 'tuple'> --- (1, 2, 3, 4, 5, 'string', <built-in function print>)
<class 'int'> --- 123
返回值为: 246

如需转载,请注明出处;本文地址:https://www.perfcode.com/p/python-getitem.html