【问题标题】:Python inheritance, class level variables, __init__ takes no argumentsPython 继承,类级变量,__init__ 不带参数
【发布时间】:2011-07-30 23:38:58
【问题描述】:

编辑:这是一个愚蠢的错误,请查看答案,但我的 init 方法没有定义 self 变量。

我有几个 Python 类,它们是管道中的阶段。它们继承自基类。

class StageBase(object):
    key = Segments.NONE
    _preprocessors = []

    def __init__():
        self.closing = False
        self.working = False
        self._que = None
        self._working_lock = None
        self._que_lock = None

    #whole bunch of other methods

继承类覆盖key 和_preprocessors。在添加显式 __init__() 方法之前,一切正常,现在我收到以下错误:

TypeError: __init__() takes no arguments (1 given)

错误所在的行是我覆盖_preprocessors 的行(在本例中,此类变量表示应在此阶段之前执行的其他阶段)。

抛出此错误的示例类:

class StaticPageStage(StageBase):
    key = Segments.STATICPAGE
    _preprocessors = [FacebookGraphStage(), ]

    def __init__():
        pass

    def process(self, data):
        data = self._preprocess(data)
        return self.handle_results(tuple(x for x in data))

谁能告诉我如何解决这个问题?

【问题讨论】:

  • 我正要更改您的问题的标题,因为您的问题与它无关,但我想避免过于具有侵略性,因为我应该完全改写它。请通过以下方式更改你自己。 :)
  • 我最近在处理一堆语法。愚蠢的错误。
  • 有人知道类似的问题要标记为重复吗?
  • 我们都会犯错误。 :) 这可能是重复的:stackoverflow.com/questions/4445405/…

标签: python pipelining


【解决方案1】:

init 的签名中必须至少包含一个参数:

def __init__(self):
    pass

这里的错误可能来自 FacebookGraphStage。检查它的 init 方法(以及您文件中的其他方法)以解决问题

【讨论】:

  • 不仅仅是__init__,而是class减速中的每个函数。
  • 不是所有的。你可以有静态方法。
【解决方案2】:

您总是在类内部的函数定义中使用self 参数,即使该函数从不接受参数。 self 作为第一个参数传递给所有函数,因此错误表示您的函数 __init__ 不接受它。

这里有一些(希望是)工作代码:

class StageBase(object):
    key = Segments.NONE
    _preprocessors = []

    def __init__(self):
        self.closing = False
        self.working = False
        self._que = None
        self._working_lock = None
        self._que_lock = None

    #whole bunch of other methods


class StaticPageStage(StageBase):
    key = Segments.STATICPAGE
    _preprocessors = [FacebookGraphStage(), ]

    def __init__(self):
        pass

    def process(self, data):
        data = self._preprocess(data)
        return self.handle_results(tuple(x for x in data))

【讨论】:

    【解决方案3】:

    需要在__init__中添加默认的self参数:

    def __init__(self):
    

    【讨论】:

      猜你喜欢
      • 2012-06-26
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 2013-10-18
      • 2014-01-07
      • 2014-05-31
      • 2012-01-31
      • 2021-04-10
      相关资源
      最近更新 更多