Python class inheritance: AttributeError: '[SubClass]' object has no attribute 'xxx'

后端 未结 5 1775
时光说笑
时光说笑 2020-12-10 00:51

I have the following base class and subclass:

class Event(object):
    def __init__(self, sr1=None, foobar=None):
        self.sr1 = sr1
        self.foobar          


        
5条回答
  •  一个人的身影
    2020-12-10 01:29

    Your subclass should be:

    class TypeTwoEvent(Event):
    
        def __init__(self, level=None, *args, **kwargs):
            super(TypeTwoEvent, self).__init__(*args, **kwargs)
            self.sr1 = level
            self.state = STATE_EVENT_TWO
    

    Because you override the __init__ method, so you need to call the parent method if you want the parent behavior to happen.

    Remember, __init__ is not a special method dispite its strange name. It's just the method automatically called after the object is created. Otherwise it's an ordinary method, and ordinary inheritance rules apply.

    super(ClassName, self).__init__(arguments, that, goes, to, parents)
    

    is the syntax to call the parent version of the method.

    For *args and **kwargs, it just ensures we catch all additional arguments passed to __init__ and pass it to the parent method, as you child method signature didn't do it and the parent need these arguments to work.

提交回复
热议问题