some_item = some_object[idx]
等价于
some_item = some_object.__getitem__(idx)
这个方法的参数idx就是你在[]之间给定的idx。这其实是对operator的一种overload。
class Data:
def __init__(self,id,address) -> None:
self.id = id
self.address = address
self.d = {self.id:1,self.address:'1111.111.11.1'}
def __getitem__(self,key):
return ('called!')
data = Data(222,'ddd')
print (data[1])
print (data['aaa'])
called!
called!
要将类实例化后,将实例当成列表形式输入下标(我输入的是空字符),不管你输入什么,只要在类中有定义def _ _ getitem_ _(self,key):都会有默认的返回值。
class STgetitem:
def __init__(self, text):
self.text = text
def __getitem__(self, index):
result = self.text[index].upper()
return result
p = STgetitem("Python")
print(p[0])
print("------------------------")
for char in p:
print(char)
P
##############################
P
Y
T
H
O
N
可以让对象实现迭代功能,这样就可以使用for…in… 来迭代该对象了