我已经有一段时间没有用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
所以类中的每个函数都有self作为第一个参数。此参数将自动填充为对对象实例的引用。当你打电话的时候
你真的在打电话:
self不是调用类函数时填写的参数,它存储为对所引用类实例的引用
因为您将init定义为只接受两个参数self和iterable,并且提供了三个参数,所以会出现错误。你知道吗
相关问题 更多 >
编程相关推荐