[New-bugs-announce] [issue47083] The __complex__ method is missing from the complex, float, and int built-in types
Géry
report at bugs.python.org
Mon Mar 21 13:09:40 EDT 2022
New submission from Géry <gery.ogam at gmail.com>:
## Expected outcome
```
>>> hasattr(complex(), '__complex__')
True
>>> hasattr(float(), '__complex__')
True
>>> hasattr(int(), '__complex__')
True
```
## Actual outcome
```
>>> hasattr(complex(), '__complex__')
False
>>> hasattr(float(), '__complex__')
False
>>> hasattr(int(), '__complex__')
False
```
## Rationale
The `numbers.Complex` abstract base class has a `__complex__` abstract method and the `numbers.Real` and `numbers.Integral` abstract base classes inherit from `numbers.Complex` (https://github.com/python/cpython/blob/v3.10.3/Lib/numbers.py#L45-L47):
```
@abstractmethod
def __complex__(self):
"""Return a builtin complex instance. Called for complex(self)."""
```
The `complex` built-in type is a virtual subclass (nominal subtype) of `numbers.Complex` (https://github.com/python/cpython/blob/v3.10.3/Lib/numbers.py#L144):
```
Complex.register(complex)
```
The `float` built-in type is a virtual subclass (nominal subtype) of `numbers.Real` (https://github.com/python/cpython/blob/v3.10.3/Lib/numbers.py#L264):
```
Real.register(float)
```
The `int` built-in type is a virtual subclass (nominal subtype) of `numbers.Integral` (https://github.com/python/cpython/blob/v3.10.3/Lib/numbers.py#L393):
```
Integral.register(int)
```
`__complex__` is the only method of the abstract base classes of `numbers` missing from `complex`, `float`, and `int`:
```
>>> import numbers
>>> for attr in dir(numbers.Complex):
... if not hasattr(complex(), attr): print(attr)
...
__abstractmethods__
__complex__
__module__
__slots__
_abc_impl
>>> for attr in dir(numbers.Real):
... if not hasattr(float(), attr): print(attr)
...
__abstractmethods__
__complex__
__module__
__slots__
_abc_impl
>>> for attr in dir(numbers.Integral):
... if not hasattr(int(), attr): print(attr)
...
__abstractmethods__
__complex__
__module__
__slots__
_abc_impl
```
----------
components: Interpreter Core
messages: 415689
nosy: maggyero
priority: normal
severity: normal
status: open
title: The __complex__ method is missing from the complex, float, and int built-in types
type: behavior
versions: Python 3.10, Python 3.11, Python 3.9
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue47083>
_______________________________________
More information about the New-bugs-announce
mailing list