简体   繁体   中英

Python inheritance, class level variables, __init__ takes no arguments

Edit: This is a silly mistake, look at the answers, but my init method does not define a self variable.

I have several python classes that are stages in a pipeline. They inherit from a base class.

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

The inheriting classes override key and _preprocessors . Before adding the explicit __init__() method, everything worked fine, now I get the following error:

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

The line of the error is the line where I override _preprocessors (in this example, this class variable represents other stages that should be executed before this stage).

An example class that throws this error:

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))

Can anyone tell me how to fix this?

您需要将默认的self参数添加到__init__

def __init__(self):

init must have at least one argument in its signature:

def __init__(self):
    pass

Here the error comes probably from FacebookGraphStage. Check its init method (and the other ones in your files) to solve the problem

You always use the self argument within function definitions inside of classes, even if the function never takes in a parameter. self is passed to all of the functions as a first parameter, so the error is saying that your function __init__ isn't accepting it.

Here's some (hopefully) working code:

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))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM