item系列 和对象使用[]访问值有联系
一般带有双下划线的方法,都不是直接调用的
引子:
obj = {"k": "v"}
print(obj) # 字典的对象
print(obj["k"]) # 字典的对象可以通过键去取值
那么其他的类对象是否可以这样取值呢
class B:
pass
b = B() # 小b也是一个对象
b["a"] # 那么这个对象是否可以像字典对象一样取值呢
#结果
# TypeError: 'B' object is not subscriptable
显然是不可以的
正常情况下,是不可以通过中括号取值的,如要非要这样的取值的话是可以的
class B:
def __getitem__(self, item):
print("执行我了", item)
return "bbbb"
b = B() # 小b也是一个对象
print(b["a"])
# 结果
# 执行我了 a
# bbbb
所以,[]操作一个对象和item有着千丝万缕的关系
class B:
def __getitem__(self, item):
print("执行我了", item)
return "bbbb"
b = B() # 小b也是一个对象
print(b["a"])
print(b["k"])
# 结果
# 执行我了 a
# bbbb
# 执行我了 k
# bbbb
相当于我用b对象拿什么都是它的返回值&#x