python中类里面方法名字是__xxx__的方法能够自动调用么。

类定义中__init__方法能够自动调用,我查了教程,说这类方法叫做专用方法,还有比如__str__等等,教程给了一个专有方法的列表。
但是我遇到了一个新的这种函数__getitem__(self,key),它不在那个列表里面,也能使用,想问,长成这样的函数是怎么调用的?我看的好像是这类函数都可以自动调用的样子。。
class Session:

def __init__(self, handler):
    self.handler = handler
    self.random_index_str = None

def __getitem__(self, key):

    self.random_index_str = self.handler.get_secure_cookie('__sson__', None)
   
    if not self.random_index_str:
        return None

    else:
        self.random_index_str = str(self.random_index_str, encoding="utf-8")

        current_user = ALL_USER_DIC.get(self.random_index_str, None)
        if not current_user:
            return None
        else:
  return current_user.get(key, None)
阅读 4.7k
2 个回答

__getitem__函数可以通过两种方式调用:

s = Session(handler)
s[key]
# 或者直接调用
s.__getitem__(key)

以双下划线开头和结尾的是特殊方法(魔术方法,读作dunder xxx, 即double underscore的缩写)。这些方法会被特定的操作隐式的调用,比如:

1. () -> __call__
2. l[] -> __getitem__
3. 实例化时: 先调用__new__在调用__init__ 
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题