我看到其他与此类似的主题,但实际上并不是我所需要的。
我有一个名为" Base"那里需要几种方法。最后是它自己的"运行":
class BaseComponent(OSUtils):
def __init__(self, cpio):
OSUtils.__init__(self, cpio.logger)
self.io = cpio
def debug(self, msg):
print("[Debug] %s" % msg)
self.logger.debug(msg)
def start(self, debug=False):
try:
self.info("--- Running %s:" % self.__class__.__name__)
print self.__class__.__name__
self.run(debug)
def run(debug=False):
component = BaseComp(cpio.ComponentIO())
component.start(debug)
if __name__ == '__main__':
print ("Testing")
我有另一个名为" BaseComp"扩展" Base"使用特定于特定需求的方法,在其上有一个"运行"必须重写的方法,并在其结束时运行"班级本身:
import dummy.io as cpio
class BaseComp(Base):
def __init__(self, cpio):
Base.__init__(self, cpio)
self.io = cpio
def run(self, debug=False):
#this method will be rewritten latter
#no matter what goes below
#
msg="blahblahblah"
Exception(msg)
def run(debug=False):
component = BaseComp(cpio.ComponentIO())
component.start(debug)
if __name__ == '__main__':
print ("Testing")
此类由另一个名为Hello的类扩展。你好重写方法"运行" BaseComp也有自己的" run"在末尾。在此运行中,调用" component.start(debug)
from base_components import BaseComp
import dummy.io as cpio
class Hello(BaseComp):
def run(self, debug=True):
print "Begin"
msg="hello world"
print "End"
def run(debug=True):
component = Hello(cpio.ComponentIO())
component.start(debug)
if __name__ == '__main__':
print("Testing Start")
run(debug = True)
print("Test End")
component.start(debug)调用方法从第一个类开始(" Base")
然而,当我打电话时,我得到了
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/user/components/comp1/__init__.py", line 166, in run component.start()
File "/home/user/directory/apps/Base.py", line 58, in start self.run(debug) ***** this is in the start method
TypeError: run() takes no arguments (2 given)
我不知道导致错误的原因。我相信这可能与很多&#34; run&#34;被称为方法
这让我抓狂,因为我在整个继承架构中有点迷失
任何帮助都会很精彩
THKS
答案 0 :(得分:1)
我认为你只是有一个缩进错误。在基本文件中,run
函数在类中缩进,因此被称为run
方法;但它不接受自动self
参数,因此错误。
您可能会发现重命名这些功能非常有用,这样他们就不会与这些方法共享名称。
答案 1 :(得分:0)
首先,你不能拥有这个
class SomeClass(object):
def somefunc():
print 'somefunc in SomeClass'
因为python类方法接收了自我&#39;默认情况下。 试图从类实例调用somefunc会产生
TypeError: somefunc() takes no arguments (1 given)
您可以添加自我
class SomeClass(object):
def somefunc(self):
print 'somefunc in SomeClass'
或者,如果您不需要或不想要自我&#39;你可以使它成为顶级函数(不是类函数)或使其成为静态方法
class SomeClass(object):
@staticmethod
def somefunc():
print 'somefunc in SomeClass'
这就是您在BaseComponent类中所拥有的内容&#39;运行方法。
答案 2 :(得分:0)
从您的错误打印输出中,您似乎正在调用OSUtils中定义的run()方法(??)。与Wyrmwood提到的一样,BaseComponent类中定义的run方法应该具有self参数或@staticmethod装饰器。
实施例
class BaseComponent(OSUtils):
def run(self, debug=False):
...
或
class BaseComponent(OSUtils):
@staticmethod
def run(debug=False):
...