GeezerVison is showing github.com — Confusing __class__ for instance of non-generic class that subclasses generic class · Issue #129 · python/typing
Confusing __class__ for instance of non-generic class that subclasses generic class #129
Description
The following program prints __main__.A[int] even though A is not generic. I'd expect it to print something like <class '__main__.A'>.
from typing import Iterator
class A(Iterator[int]):
def __next__(self): pass
print(A().__class__)
Also, this does not generate an exception, even though A is not generic:
def f(x: A[int]) -> None: pass
Activity
changed the title
[-]Confusing __class__ for instance of non-generic class that subclasses generic clsas[/-] [+]Confusing __class__ for instance of non-generic class that subclasses generic class[/+] on May 21, 2015gvanrossum commented on May 21, 2015
I'm on the fence about calling this a bug. What I implemented in rev 25af77d is that no matter how you instantiate A, you always get the original class A as the instance's __class__. And that is what's happening here. It just so happens that the actual class A remembers its parameters. Regarding using A[int] later, that probably shouldn't be allowed -- I need to rework the logic here. This is also related to issue #115. I will have to come back to this later.
gvanrossum commented on Apr 4, 2016
Metadata
Metadata
Development
No branches or pull requestsIssue actions