﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
36962	Missing call to superclass `__init__` during object initialization	kochengrac		"[https://github.com/django/django/blob/main/django/contrib/admin/widgets.py#L94-L626 / L94-L626]
[https://github.com/django/django/blob/main/django/forms/widgets.py#L1116-L1116 / L1116-L1116]
[https://github.com/django/django/blob/main/django/contrib/gis/forms/widgets.py#L12-L12 / L12-L12]
[https://github.com/django/django/blob/main/django/db/models/expressions.py#L1880-L1880 / L1880-L1880]
[https://github.com/django/django/blob/main/django/core/handlers/wsgi.py#L56-L56 / L56-L56]
[https://github.com/django/django/blob/main/django/template/defaulttags.py#L909-L909 / L909-L909]
[https://github.com/django/django/blob/main/django/contrib/admin/widgets.py#L630-L630 / L630-L630]
[https://github.com/django/django/blob/main/django/contrib/gis/db/backends/oracle/adapter.py#L7-L7 / L7-L7]
[https://github.com/django/django/blob/main/django/db/backends/ddl_references.py#L72-L72 / L72-L72]
[https://github.com/django/django/blob/main/django/contrib/admin/widgets.py#L262-L262 / L262-L262]



**Missing call to superclass __init__ during object initialization**
Pythonunlike some other object-oriented languages such as Java, allows the developer complete freedom in when and how superclass initializers are called during object initialization. However, the developer has responsibility for ensuring that objects are properly initialized, and that all superclass `__init__` methods are called.

If the `__init__` method of a superclass is not called during object initialization, this can lead to errors due to the object not being fully initialized, such as having missing attributes. A call to the `__init__` method of a superclass during object initialization may be unintentionally skipped:

- If a subclass calls the `__init__` method of the wrong class.
- If a call to the `__init__` method of one its base classes is omitted.
- If a call to `super().__init__` is used, but not all `__init__` methods in the Method Resolution Order (MRO) chain themselves call `super()`. This in particular arises more often in cases of multiple inheritance.

explicit calls to __init__ are used, but SportsCar erroneously calls Vehicle.__init__. This is fixed in FixedSportsCar by calling Car.__init__.


{{{
class Vehicle(object):
    
    def __init__(self):
        self.mobile = True
        
class Car(Vehicle):
    
    def __init__(self):
        Vehicle.__init__(self)
        self.car_init()
        
class SportsCar(Car, Vehicle):
    
    def __init__(self):
        Vehicle.__init__(self)
        self.sports_car_init()
        
class FixedSportsCar(Car, Vehicle):
    
    def __init__(self):
        Car.__init__(self)
        self.sports_car_init()
}}}
**References**
[https://docs.python.org/3/reference/datamodel.html#object.__init__ / Python init]
[https://docs.python.org/3/reference/datamodel.html#object.__init__ / Python Standard Library super]
[https://docs.python.org/3/glossary.html#term-method-resolution-order / Python Glossary Method resolution order]

"	Uncategorized	closed	Core (Other)	6.0	Normal	invalid		kochengrac	Unreviewed	0	0	0	0	0	0
