Skip to content

Confusing __class__ for instance of non-generic class that subclasses generic class #129

Description

@JukkaL

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

  1. 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, 2015
  2. self-assigned this
    on May 21, 2015
  3. gvanrossum commented on May 21, 2015

    @gvanrossum
    Member

    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.

  4. added this to the 3.5.2 milestone on Apr 4, 2016
  5. gvanrossum commented on Apr 4, 2016

    @gvanrossum
    Member

    OK, fixed by #195.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions