“接受1个位置参数,但给出了2个”Python OOP中的错误

2024-10-03 15:31:57 发布

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

我是python新手,有c++背景

我正试着让我的头脑清醒过来。我正在创建一个类,它使用Zero MQ库连接到其他软件。在

我试图在类中创建私有元素,据我所知,这是通过在成员和属性名称前面添加两个下划线来实现的。在

我得到这个错误-stacktrace:

 File "d:/python/mt4inPython/Mt4Client.py", line 29, in <module>
 test = MT4Client(30, 40, 50)
 File "d:/python/mt4inPython/Mt4Client.py", line 10, in __init__
 self.__SetupPorts(self)
 TypeError: __SetupPorts() takes 1 positional argument but 2 were given

我的班级:

^{pr2}$

在pythonoop中,我注意到需要将self作为每个方法的第一个参数传递。在

但有人能告诉我为什么我会犯这些论点错误吗?我不知道背景中隐藏的python魔力是什么?在

非常感谢。在


Tags: inpyself元素错误line成员file
1条回答
网友
1楼 · 发布于 2024-10-03 15:31:57

所有实例方法的声明中都需要有一个self参数(尽管具体的名称self只是约定),但在实例上调用方法时,通常不需要手动传递它。当您查找some_instance.method时,它将方法“绑定”到实例,这样当您调用它时,该实例将作为第一个参数自动传递。在

在你的代码中,你应该调用self.__SetupPorts()。在

我进一步建议您去掉当前使用的大多数或所有双前导下划线名称。这个前缀调用Python的名称混乱系统。名称混乱只适用于一些不常见的情况,如编写代理或mixin类,在这种情况下,您不知道在您自己的属性名之外还可以使用哪些其他属性名。在

如果只想将变量或方法标记为“private”,请使用一个前导下划线。这并不会阻止其他代码访问该属性(实际上也不会阻止name-mangling),但它可以作为您将属性私有化的意图的文档。在

相关问题 更多 >