Commit b6cb0ed
authored
Allow iterable class objects to be unpacked (including enums) (#14827)
Fixes #14782
Currently, mypy issues a false positive if you try to unpack an enum
class:
```python
from enum import Enum
class E(Enum):
A = 1
B = 2
A, B = E # error: "Type[E]" object is not iterable [misc]
```
This is because of a more general problem with class objects that have
`__iter__` defined on their metaclass. Mypy issues a false positive on
this code, where `Foo` is iterable by virtue of having `Meta` as its
metaclass:
```python
from typing import Iterator
class Meta(type):
def __iter__(cls) -> Iterator[int]:
yield from [1, 2, 3]
class Foo(metaclass=Meta): ...
a, b, c = Foo # error: "Type[Foo]" object is not iterable [misc]
reveal_type(a) # error: Cannot determine type of "a" [has-type] # note: Revealed type is "Any"
```
This PR fixes the false positive with enums, and the more general false
positive with iterable class objects.1 parent 31f70d7 commit b6cb0ed
File tree
3 files changed
+143
-9
lines changed- mypy
- test-data/unit
3 files changed
+143
-9
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3632 | 3632 | | |
3633 | 3633 | | |
3634 | 3634 | | |
3635 | | - | |
| 3635 | + | |
| 3636 | + | |
| 3637 | + | |
3636 | 3638 | | |
3637 | 3639 | | |
3638 | 3640 | | |
| |||
6387 | 6389 | | |
6388 | 6390 | | |
6389 | 6391 | | |
6390 | | - | |
6391 | | - | |
6392 | | - | |
6393 | | - | |
6394 | | - | |
6395 | | - | |
6396 | | - | |
| 6392 | + | |
| 6393 | + | |
| 6394 | + | |
| 6395 | + | |
| 6396 | + | |
| 6397 | + | |
| 6398 | + | |
| 6399 | + | |
6397 | 6400 | | |
6398 | | - | |
| 6401 | + | |
6399 | 6402 | | |
6400 | 6403 | | |
6401 | 6404 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
270 | 270 | | |
271 | 271 | | |
272 | 272 | | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
273 | 387 | | |
274 | 388 | | |
275 | 389 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1878 | 1878 | | |
1879 | 1879 | | |
1880 | 1880 | | |
| 1881 | + | |
| 1882 | + | |
| 1883 | + | |
| 1884 | + | |
| 1885 | + | |
| 1886 | + | |
| 1887 | + | |
| 1888 | + | |
| 1889 | + | |
| 1890 | + | |
| 1891 | + | |
| 1892 | + | |
| 1893 | + | |
| 1894 | + | |
| 1895 | + | |
| 1896 | + | |
| 1897 | + | |
1881 | 1898 | | |
1882 | 1899 | | |
1883 | 1900 | | |
| |||
0 commit comments