是否有一种“魔法方法”可以通过 instance[0] 而不是 instance.list[0] 访问在类中定义的列表?

Tim*_*wen 0 python oop python-3.x

如果我有代码:

names = ["Dave", "John", "Bob"]
Run Code Online (Sandbox Code Playgroud)

我想从我会做的名字中得到戴夫:

names[0]
Run Code Online (Sandbox Code Playgroud)

如果我现在有代码

class Friends:
    def __init__(self, *people):
        self.names = []
        for v in people:
            self.names.append(v)

names = Friends("Dave", "John", "Bob")
Run Code Online (Sandbox Code Playgroud)

现在要得到戴夫,我必须这样做:

names.names[0]
Run Code Online (Sandbox Code Playgroud)

是否有一种神奇的方法或类似的方法,以便我可以这样做:

names[0]
Run Code Online (Sandbox Code Playgroud)

再次得到戴夫?

qme*_*eus 5

是的,它被__getitem__称为:

class MyClass:
    def __init__(self):
        self.names = ["john", "arthur"]

    def __getitem__(self, i):
        return self.names[i]

print(MyClass()[0])
# john
Run Code Online (Sandbox Code Playgroud)