名称损坏Examp的问题

2024-09-30 04:35:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经有一段时间没有用Python做OOP了,所以我快速回顾了一些我忘记如何使用的特性。当我在Python教程(https://docs.python.org/3/tutorial/classes.html#private-variables-and-class-local-references)中看到name mangling时,我复制了这个示例,这样我就可以玩它了,但它不起作用!我又看了一遍,以确保没有输入任何拼写错误,然后复制并粘贴了它,但它告诉我我传递了错误的参数数。我不是犯了一个非常愚蠢的错误就是发生了一些奇怪的事情。有人知道为什么会这样吗?我使用的是最新版本:3.6.5。你知道吗

为了验证我输入的内容是否正确,我尝试命名mangle:

class Mapping:
    def __init__(self, iterable):
        self.items_list = []
        self.__update(iterable)

    def update(self, iterable):
        for item in iterable:
            self.items_list.append(item)

    __update = update   # private copy of original update() method

class MappingSubclass(Mapping):

    def update(self, keys, values):
        # provides new signature for update()
        # but does not break __init__()
        for item in zip(keys, values):
            self.items_list.append(item)

def main():
    foo = MappingSubclass(['a'], ['b'])

if __name__ == "__main__":
    main()

这里有一个例外:

Traceback (most recent call last):
  File "C:/Users/Hanni/OneDrive/Documents/Programs/Python/temp.py", line 24,     in <module>
    main()
  File "C:/Users/Hanni/OneDrive/Documents/Programs/Python/temp.py", line 21, in main
    foo = MappingSubclass(['a'], ['b'])
TypeError: __init__() takes 2 positional arguments but 3 were given

Tags: nameinselfforinitmaindefupdate
1条回答
网友
1楼 · 发布于 2024-09-30 04:35:27

所以类中的每个函数都有self作为第一个参数。此参数将自动填充为对对象实例的引用。当你打电话的时候

foo = MappingSubclass(['a'], ['b'])

你真的在打电话:

__init__(foo, ['a'], ['b'])

self不是调用类函数时填写的参数,它存储为对所引用类实例的引用

因为您将init定义为只接受两个参数self和iterable,并且提供了三个参数,所以会出现错误。你知道吗

相关问题 更多 >

    热门问题