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 thi开发者_运维技巧s 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?
You need to add the default self
parameter to __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))
精彩评论