gpt4 book ai didi

python - 名称修改示例的问题

转载 作者:行者123 更新时间:2023-12-01 09:33:56 24 4
gpt4 key购买 nike

我已经有一段时间没有用 Python 进行 OOP 了,所以我快速回顾了一些我忘记了如何使用的功能。当我到达 Python 教程 ( https://docs.python.org/3/tutorial/classes.html#private-variables-and-class-local-references ) 中的名称修改时,我复制了示例以便我可以使用它,但它不起作用!我又检查了一遍以确保没有输入任何拼写错误,然后复制并粘贴它,但它告诉我传递了错误数量的参数。我要么犯了一个极其愚蠢的错误,要么发生了一些奇怪的事情。有谁知道为什么会发生这种情况?我使用的是最新版本: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

最佳答案

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

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

你真的在打电话:

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

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

由于您将 init 定义为仅接受两个参数(self 和 iterable),并且您提供了三个参数,因此会出现错误。

关于python - 名称修改示例的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49702906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com