Skip to content

gh-144989: Expose special method lookup at Python level - #144990

Open
tanloong wants to merge 33 commits into
python:mainfrom
tanloong:expose-lookupspeicalmethod
Open

gh-144989: Expose special method lookup at Python level#144990
tanloong wants to merge 33 commits into
python:mainfrom
tanloong:expose-lookupspeicalmethod

Conversation

@tanloong

@tanloongtanloong commented Feb 19, 2026

Copy link
Copy Markdown
Contributor

This exposes _PyObject_LookupSpecialMethod() as types.lookup_special_method(obj, attr).

I am not quite sure which one between the two similar funtions in Objects/typeobject.c should be preferred to be exposed: _PyObject_LookupSpecial() or _PyObject_LookupSpecialMethod(). I chose the _PyObject_LookupSpecialMethod() because it is the function that is called by LOAD_SPECIAL. So I suppose using this one is more consistent with the CPython interpreter when parsing with-statements (#144386 (comment)).

However, I am open to adjusting the PR to expose _PyObject_LookupSpecial() instead if that one is more suitable.


Updated based on the consensus reached by now on discourse discussion:

  1. Switched to _PyObject_LookupSpecial instead of _PyObject_LookupSpecialMethod and accordingly renamed (for now) the function from lookup_special_method to lookup_special.
  2. Raise AttributeError if the special method is not found.
  3. Add optional default parameter similar to getattr.

📚 Documentation preview 📚: https://cpython-previews--144990.org.readthedocs.build/

@ZeroIntensityZeroIntensity left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs a "What's New in Python 3.15" entry.

Comment threadModules/_typesmodule.c
Comment threadModules/_typesmodule.c Outdated
Comment threadModules/_typesmodule.c Outdated
Comment threadDoc/library/types.rst Outdated
Comment threadDoc/library/types.rst Outdated
Comment threadMisc/NEWS.d/next/Library/2026-02-19-17-46-59.gh-issue-144989.JAuJyG.rst Outdated
Comment threadModules/_typesmodule.c
@tanloong

Copy link
Copy Markdown
ContributorAuthor

@ZeroIntensity Thank you for your review! I've updated the code accordingly. Could you please take another look when you have time? Thanks again!

@tanloong
tanloong marked this pull request as draft February 21, 2026 12:09
…ethod;
2. raise AttributeError instead of returning None;
3. add optional `default` parameter, similar to `getattr`: lookup_special(object, name[, default])
4. There are different opinions on which module should the function be
in. Leave it in `types` until there is consensus.
This is temporary as which module should the function be put is not determined yet in the discourse discussion.
This is temporary as which module should the function be put is not determined yet in the discourse discussion.
tanloongand others added 2 commits February 23, 2026 22:22
* Added `default` parameter to `lookup_special` in `types.py`
See https://discuss.python.org/t/expose-special-method-lookup-at-python-level/106236 for more.
---------
Co-authored-by: JoBe <165585785+JoBeGaming@users.noreply.github.com>
@python-cla-bot

python-cla-botBot commented Feb 23, 2026

Copy link
Copy Markdown

All commit authors signed the Contributor License Agreement.

CLA signed

@JoBeGaming

Copy link
Copy Markdown

Finally all checks passing :)

tanloongand others added 2 commits February 28, 2026 00:14
Co-authored-by: JoBe <165585785+JoBeGaming@users.noreply.github.com>
This line of comment is copied from definition of `builtin_getattr` in
Python/bltinmodule.c. Make this newly added `_types_lookup_special_impl`
easier to be found when doing the Argument Clinic convertion in the future.
@tanloong
tanloong marked this pull request as ready for review March 1, 2026 15:39
@read-the-docs-community

read-the-docs-communityBot commented May 1, 2026

Copy link
Copy Markdown

Documentation build overview

📚 cpython-previews | 🛠️ Build #32509439 | 📁 Comparing f6c88dc against main (8066db5)

🔍 Preview build

32 files changed · ± 32 modified

±Modified

@github-actions

Copy link
Copy Markdown

This PR is stale because it has been open for 90 days with no activity.

@github-actionsgithub-actionsBot added the stale Stale PR or inactive for long period of time. label Aug 9, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting reviewstaleStale PR or inactive for long period of time.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@tanloong@JoBeGaming@ZeroIntensity