You don’t explicitly pass self as a parameter to __init__. In this situation, it’s acting as the data to be bound to the form - that’s why you’re seeing the results you’re showing.
When you call a class method, Python passes self as the first parameter. So in this case, what __init__ is actually getting is self, self, initial=[{'typ': 'typ1'}, {'typ':'typ2'}]
Thanks for the answer. It is a copy error. Of course there is no need to add self in the init. However with correct init the problem remains. In fact after digging more into django code, it seems that in the construct_form in formset, only kwargs are passed. The code below seems to be correct: