protocolbuffers/protobuf

Python: Use multi-phase initialisation (PEP 489)

Open

#21995 opened on May 28, 2025

View on GitHub
 (3 comments) (0 reactions) (1 assignee)C++ (71,223 stars) (16,128 forks)batch import
help wantedkeep openpython

Description

What language does this apply to?

Python

Describe the solution you'd like

Hello,

Please consider adopting multi-phase init for your Python extension modules. In short, multi-phase makes extension modules behave more like pure-Python modules and means that the import system can determine what a module supports before executing it.

Multi-phase initialisation was introduced in PEP 489 for Python 3.5. It replaces the previous 'single-phase' mechanism by splitting the module creation process into creation and execution phases. Quoting from the documentation:

Extension modules created this way behave more like Python modules: the initialization is split between the creation phase, when the module object is created, and the execution phase, when it is populated. The distinction is similar to the __new__() and __init__() methods of classes.

It is the preferred mechanism for extension module initialisation, and we are considering explicitly deprecating single phase init.

Describe alternatives you've considered

The status quo.

A

Contributor guide