On 03/30/2017 05:39 AM, Rafael Knuth wrote: >>>> I am trying to wrap my head around the super constructor. > > Is it possible to embed a super constructor into an if / elif > statement within the child class? > > if message == "string A": return X > elif: return Y > > How should I modify my code below? > (I couldn't solve that by myself) > > class A: > def __init__(self, message): > self.message = message > print(message) > > class B(A): > def __init__(self, message): > print("This is the message from your parent class A:") > super(B, self).__init__(message) > > B("BlaBla")
For grins, try this (decorated with prints). There's an additional argument allowed to the class B initializer, but set as a default argument so that if you omit it it defaults to True. === class A(object): def __init__(self, msg): print('A: Initializing instance of', self.__class__.__name__) self.message = msg class B(A): def __init__(self, msg, doinit=True): print('B: Initializing instance of', self.__class__.__name__) if doinit: super().__init__(msg) print("Instantiating an A:") a = A("some message") print(a.message) print("Instantiating a B:") b = B("some message") print(b.message) print("Instantiating a B without calling superclass __init__:") c = B("some message", False) print(c.message) === When you run it: Instantiating an A: A: Initializing instance of A some message Instantiating a B: B: Initializing instance of B A: Initializing instance of B some message Instantiating a B without calling superclass __init__: B: Initializing instance of B Traceback (most recent call last): File "constr-tutor.py", line 22, in <module> print(c.message) AttributeError: 'B' object has no attribute 'message' === So note that: the instance attribute "message" is set in the class A initializer, as in all your postings in this thread. Just like Alan pointed out, there are implications if you don't call up to the superclass, and it shows up pretty clearly here: in the third case, where we decide not to call the parent's __init__, this initialization doesn't happen and the attribute is missing, so accessing it blows up with an AttributeError exception. _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor