protocolbuffers / protocolbuffers/protobuf
Python: Use multi-phase initialisation (PEP 489)
@anandolee is already working on this.
Since Jun 3, 2025.
- Dominant language
- C++
- Stars
- 72k
- Forks
- 16.3k
- Avg merge
- 1d 17h
- Merged PRs (30d)
- 140
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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.