mirror of
https://github.com/pytorch/pytorch.git
synced 2025-10-21 05:34:18 +08:00
[JIT] Skip builtins while enumerating class methods (#91805)
This is needed to support `enum.Enum` derived classes in Python-3.11
that adds `_new_member_` to classdict, see:
15c44789bb/Lib/enum.py (L529)
Following snippet illustrates the problem with the previous iteration of
the code on 3.11:
```python
from enum import Enum
import inspect
class Color(Enum):
RED = 1
GREEN = 2
def print_routines(cls):
print(cls.__name__)
for name in cls.__dict__:
fn = getattr(cls, name)
if inspect.isroutine(fn):
print(name, fn, f"has_globals: {hasattr(fn, '__globals__')}")
print_routines(Color)
```
Pull Request resolved: https://github.com/pytorch/pytorch/pull/91805
Approved by: https://github.com/albanD, https://github.com/suo
This commit is contained in:
committed by
PyTorch MergeBot
parent
69acc34083
commit
4f1f14e38b
@ -448,6 +448,10 @@ def createResolutionCallbackForClassMethods(cls):
|
||||
for name in cls.__dict__
|
||||
if inspect.isroutine(getattr(cls, name))
|
||||
]
|
||||
# Skip built-ins, as they do not have global scope nor type hints
|
||||
# Needed to support `enum.Enum` derived classes in Python-3.11
|
||||
# That adds `_new_member_` property which is an alias to `__new__`
|
||||
fns = [fn for fn in fns if not inspect.isbuiltin(fn)]
|
||||
captures = {}
|
||||
|
||||
for fn in fns:
|
||||
|
Reference in New Issue
Block a user