[issue44318] Asyncio classes missing __slots__

Bluenix report at bugs.python.org
Sat Jun 5 14:22:40 EDT 2021


Bluenix <bluenixdev at gmail.com> added the comment:

>>> (1).__dict__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute '__dict__'
>>> 4.5.__dict__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'float' object has no attribute '__dict__'
>>> 'Hello'.__dict__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute '__dict__'
>>> b'50'.__dict__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute '__dict__'
>>> [2.72, 3.14].__dict__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute '__dict__'


> __slots__ allow us to explicitly declare data members (like properties) and deny the creation of __dict__ and __weakref__ (unless explicitly declared in __slots__ or available in a parent.)

>From https://docs.python.org/3/reference/datamodel.html

They don't have __slots__, nor a __dict__ or __weakref__:

>>> (1).__weakref__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute '__weakref__'
>>> 4.5.__weakref__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'float' object has no attribute '__weakref__'
>>> 'Hello'.__weakref__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute '__weakref__'
>>> b'50'.__weakref__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute '__weakref__'
>>> [2.72, 3.14].__weakref__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute '__weakref__'

They're essentially C extension classes: https://docs.python.org/3/extending/newtypes_tutorial.html

I am not sure what this argument was meant to prove.


What would be the downside to adding __slots__ to asyncio's classes? Other than that someone can no longer arbitrarily add attributes?

----------

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue44318>
_______________________________________


More information about the Python-bugs-list mailing list