Message309200
Quoting my own post on python-ideas:
After I generate an UML diagram from collections.abc, I found very strange that MappingView inherit from Sized instead of Collection (new in python 3.6).
Yes, MappingView only define __len__ and not __iter__ and __contains__, but all of its subclasses define them (KeysView, ValuesView and ItemViews).
I tried to run the tests in test/test_collections.py after making this change and on only one fail :
Traceback (most recent call last):
File "/usr/lib/python3.6/test/test_collections.py", line 789, in test_Collection
self.assertNotIsInstance(x, Collection)
AssertionError: dict_values([]) is an instance of <class 'collections.abc.Collection'>
Wich is absolutely wrong, since in reality a dict_values instance has the behaviour of a Collection:
>>> vals = {1:'a', 2: 'b'}.values()
>>> 'a' in vals
True
>>> 'c' in vals
False
>>> len(vals)
2
>>> for val in vals:
... print(val)
...
a
b
The only lack is that it doesn't define a __contains__ method:
>>> '__contains__' in vals
False
It uses __iter__ to find the presence of the value.
But, hey: we have register() for this cases! In fact, when MappingView inherit from Collection, dict_values is considered as a subclass of Collection since it's in the register of ValuesView, causing the above bug...
So, the test have to be changed, and dict_values must be placed in the samples that pass the test, and not in the ones that fail it. |
|
Date |
User |
Action |
Args |
2017-12-29 21:59:35 | yahya-abou-imran | set | recipients:
+ yahya-abou-imran |
2017-12-29 21:59:35 | yahya-abou-imran | set | messageid: <1514584775.87.0.213398074469.issue32449@psf.upfronthosting.co.za> |
2017-12-29 21:59:35 | yahya-abou-imran | link | issue32449 messages |
2017-12-29 21:59:35 | yahya-abou-imran | create | |
|