Skip to content

gh-73055: Skip one additional frame when type.__new__ is called not directly from type.__call__. - #14166

Closed
serhiy-storchaka wants to merge 8 commits into
python:mainfrom
serhiy-storchaka:type-call-set-module
Closed

serhiy-storchaka wants to merge 8 commits into
python:mainfrom
serhiy-storchaka:type-call-set-module

Conversation

@serhiy-storchaka

@serhiy-storchaka serhiy-storchaka commented Jun 17, 2019 •

Copy link
Copy Markdown
Member

* Move handling of one-argument call of type() from type.__new__() to type.__call__().
* Move deducing __module__ from the caller's frame from type.__new__() to type.__call__().
@brettcannon brettcannon added the type-bug An unexpected behavior, bug, or error label Jun 21, 2019
@ilevkivskyi

Copy link
Copy Markdown
Member

@serhiy-storchaka I like this approach, please let me know when this is ready for review (I assume tests are needed and some comments explaining this behavior).

@serhiy-storchaka

Copy link
Copy Markdown
Member Author

Yes, it needs tests and documenting.

Also this PR contains actually two changes. I am not sure that both of them should be backported, but it is difficult to make one without making other.

@serhiy-storchaka

Copy link
Copy Markdown
Member Author

I just have tested, and seems there is no undesired behavior change. So I just need to write tests and a NEWS entry.

@serhiy-storchaka

Copy link
Copy Markdown
Member Author

Unfortunately it does not work. Not setting __module__ in the class dictionary does not help with the original issue, because __module__ will be looked up in the metaclass dictionary. Setting it in __call__() opens other questions and significantly complicates the code.

@serhiy-storchaka serhiy-storchaka changed the title [WIP] bpo-28869: Change some details in type(). bpo-28869: Skip one additional frame when type.__new__ is called not directly from type.__call__. Oct 13, 2019

@ilevkivskyi ilevkivskyi 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.

I have one question/comment. Also if we are going this way, I think this deserves a comment in the code explaining the motivation.

Comment thread Objects/typeobject.c
}
while (depth-- > 0 && f->f_back) {
f = f->f_back;
}

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.

Unless I am missing something, depth can be only either 0 or 1, maybe it is better to use a name like skip or nested and write this as:

if (skip_frame && f->f_back) {
    f = f->f_back;
}

@ilevkivskyi

Copy link
Copy Markdown
Member

It looks like this may also fix https://bugs.python.org/issue37948

@serhiy-storchaka

Copy link
Copy Markdown
Member Author

I am not sure it is a good solution.

@github-actions

github-actions Bot commented Apr 7, 2026

Copy link
Copy Markdown

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

@github-actions github-actions Bot added the stale Stale PR or inactive for long period of time. label Apr 7, 2026
@serhiy-storchaka serhiy-storchaka changed the title bpo-28869: Skip one additional frame when type.__new__ is called not directly from type.__call__. gh-73055: Skip one additional frame when type.__new__ is called not directly from type.__call__. Aug 12, 2026
@github-actions github-actions Bot removed the stale Stale PR or inactive for long period of time. label Aug 14, 2026
@ambv

ambv commented Oct 20, 2026

Copy link
Copy Markdown
Contributor

This PR has not been touched by a human in more than 5 years. Closing to cull the number of open pull requests. Do not reopen this pull request without getting a go-ahead from a triager or core developer on the related issue.

@ambv ambv closed this Oct 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting core review DO-NOT-MERGE type-bug An unexpected behavior, bug, or error

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants