这是一个简单测试的代码:
class ECollector:
#error msg collector
#this class should be used as 'global'
msgs = []
def addmsg(self,msg):
self.msgs.append(msg)
def clear(self):
self.msgs = []
class test(ECollector):
dcodes = []
ECollector
def new(self):
ECollector.addmsg("test!")
这是我在python控制台上运行的 (顺便说一句,我使用的是pyscripter2.3和python3.12)
^{pr2}$我得到的是:
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "C:\...\test.py", line 14, in new
ECollector.addmsg("test!")
TypeError: addmsg() takes exactly 2 positional arguments (1 given)
我是python的新手…我对这整件事很困惑;;; 我认为“self”参数在调用def函数时不需要填充。在
请把这个可怜的新手从这个麻烦的“现象”中解救出来,给他一些解决办法。 谢谢:)
您已经将}。在
addmsg
定义为实例方法。你可能是说self.addmsg("test!")
而不是{这可能有很多问题。让我们从顶部开始。看起来您实际上只是使用
ECollector
作为名称空间来分组一些函数。没关系,但是您要调用ECollector.some_method
,您需要稍微改变一下,将这些方法转换为类方法:这意味着无论何时调用
addmsg
或clear
,它们都会得到类本身的隐式第一个参数。在我转换它的这种特殊方式下,每个子类都将得到它自己的msgs
。如果希望所有子类共享一个msgs
属性,那么可以将cls
更改为ECollector
另外,您还需要稍微改变一下子类,因为您是从
^{pr2}$ECollector
子类化的,但是直接调用它的方法。您可以这样做:您调用
ECollector.addMsg
的方式看起来像是将其用作python静态方法,这意味着它不会传递“self”参数(如果您是编程语言的新手,并且不了解什么是静态方法,请告诉我)。但是,我的猜测是您希望将它用作实例方法而不是静态方法。在相反,您可能希望按以下方式执行:
相关问题 更多 >
编程相关推荐