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