Skip to content

Consider making staticmethod and classmethod generic #132457

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
sobolevn opened this issue Apr 12, 2025 · 2 comments
Closed

Consider making staticmethod and classmethod generic #132457

sobolevn opened this issue Apr 12, 2025 · 2 comments
Labels
interpreter-core (Objects, Python, Grammar, and Parser dirs) topic-typing type-feature A feature request or enhancement

Comments

@sobolevn
Copy link
Member

sobolevn commented Apr 12, 2025

Feature or enhancement

Typeshed defines staticmethod and classmethod as generics:

  1. https://github.com/python/typeshed/blob/f6216ec6230aa51fe7e23afca30a8f5b18ace476/stdlib/builtins.pyi#L137
  2. https://github.com/python/typeshed/blob/f6216ec6230aa51fe7e23afca30a8f5b18ace476/stdlib/builtins.pyi#L154

It makes sense, because they are very callable-like. However:

>>> staticmethod[int]
Traceback (most recent call last):
  File "<python-input-0>", line 1, in <module>
    staticmethod[int]
    ~~~~~~~~~~~~^^^^^
TypeError: type 'staticmethod' is not subscriptable
>>> classmethod[int]
Traceback (most recent call last):
  File "<python-input-1>", line 1, in <module>
    classmethod[int]
    ~~~~~~~~~~~^^^^^
TypeError: type 'classmethod' is not subscriptable

We should consider making them generics in runtime as well.

@AlexWaygood @JelleZijlstra thoughts?
If you agree, I have a PR ready.

Linked PRs

@sobolevn sobolevn added interpreter-core (Objects, Python, Grammar, and Parser dirs) topic-typing type-feature A feature request or enhancement labels Apr 12, 2025
@sobolevn sobolevn self-assigned this Apr 12, 2025
@sobolevn sobolevn removed their assignment Apr 13, 2025
@IvanKirpichnikov
Copy link
Contributor

IvanKirpichnikov commented Apr 17, 2025

Another thing I noticed is that some generics in typeshed are not actually generics.
For example, almost all objects in itertools.pyi and functools.pyi are generics, but only a few of them are actually generics.

I can provide a list of such objects. I am also ready to undertake this correction if it is approved.

@JelleZijlstra
Copy link
Member

For a number of itertools there's already an open issue in CPython, there was some hesitation about making them generic at runtime.

diegorusso added a commit to diegorusso/cpython that referenced this issue May 4, 2025
* origin/main: (111 commits)
  pythongh-91048: Add filename and line number to external inspection routines (pythonGH-133385)
  pythongh-131178: Add tests for `ast` command-line interface (python#133329)
  Regenerate pcbuild.sln in Visual Studio 2022 (python#133394)
  pythongh-133042: disable HACL* HMAC on Emscripten (python#133064)
  pythongh-133351: Fix remote PDB's multi-line block tab completion (python#133387)
  pythongh-109700: Improve stress tests for interpreter creation (pythonGH-109946)
  pythongh-81793: Skip tests for os.link() to symlink on Android (pythonGH-133388)
  pythongh-126835: Rename `ast_opt.c` to `ast_preprocess.c` and related stuff after moving const folding to the peephole optimizier (python#131830)
  pythongh-91048: Relax test_async_global_awaited_by to fix flakyness (python#133368)
  pythongh-132457: make staticmethod and classmethod generic (python#132460)
  pythongh-132805: annotationlib: Fix handling of non-constant values in FORWARDREF (python#132812)
  pythongh-132426: Add get_annotate_from_class_namespace replacing get_annotate_function (python#132490)
  pythongh-81793: Always call linkat() from os.link(), if available (pythonGH-132517)
  pythongh-122559: Synchronize C and Python implementation of the io module about pickling (pythonGH-122628)
  pythongh-69605: Add PyREPL import autocomplete feature to 'What's New' (python#133358)
  bpo-44172: Keep reference to original window in curses subwindow objects (pythonGH-26226)
  pythonGH-133231: Changes to executor management to support proposed `sys._jit` module (pythonGH-133287)
  pythongh-133363: Fix Cmd completion for lines beginning with `! ` (python#133364)
  pythongh-132983: Introduce `_zstd` bindings module (pythonGH-133027)
  pythonGH-91048: Add utils for printing the call stack for asyncio tasks (python#133284)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
interpreter-core (Objects, Python, Grammar, and Parser dirs) topic-typing type-feature A feature request or enhancement
Projects
None yet
Development

No branches or pull requests

3 participants