Skip to content

[3.12] gh-115450: Fix direct invocation of test_desctut (GH-115451) #115453

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

Merged
merged 1 commit into from
Feb 14, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions Lib/test/test_descrtut.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,16 @@ def merge(self, other):
Here's the new type at work:

>>> print(defaultdict) # show our type
<class 'test.test_descrtut.defaultdict'>
<class '%(modname)s.defaultdict'>
>>> print(type(defaultdict)) # its metatype
<class 'type'>
>>> a = defaultdict(default=0.0) # create an instance
>>> print(a) # show the instance
{}
>>> print(type(a)) # show its type
<class 'test.test_descrtut.defaultdict'>
<class '%(modname)s.defaultdict'>
>>> print(a.__class__) # show its class
<class 'test.test_descrtut.defaultdict'>
<class '%(modname)s.defaultdict'>
>>> print(type(a) is a.__class__) # its type is its class
True
>>> a[1] = 3.25 # modify the instance
Expand Down Expand Up @@ -99,7 +99,7 @@ def merge(self, other):
>>> print(sortdict(a.__dict__))
{'default': -1000, 'x1': 100, 'x2': 200}
>>>
"""
""" % {'modname': __name__}

class defaultdict2(dict):
__slots__ = ['default']
Expand Down Expand Up @@ -264,19 +264,19 @@ def merge(self, other):
... print("classmethod", cls, y)

>>> C.foo(1)
classmethod <class 'test.test_descrtut.C'> 1
classmethod <class '%(modname)s.C'> 1
>>> c = C()
>>> c.foo(1)
classmethod <class 'test.test_descrtut.C'> 1
classmethod <class '%(modname)s.C'> 1

>>> class D(C):
... pass

>>> D.foo(1)
classmethod <class 'test.test_descrtut.D'> 1
classmethod <class '%(modname)s.D'> 1
>>> d = D()
>>> d.foo(1)
classmethod <class 'test.test_descrtut.D'> 1
classmethod <class '%(modname)s.D'> 1

This prints "classmethod __main__.D 1" both times; in other words, the
class passed as the first argument of foo() is the class involved in the
Expand All @@ -292,18 +292,18 @@ class passed as the first argument of foo() is the class involved in the

>>> E.foo(1)
E.foo() called
classmethod <class 'test.test_descrtut.C'> 1
classmethod <class '%(modname)s.C'> 1
>>> e = E()
>>> e.foo(1)
E.foo() called
classmethod <class 'test.test_descrtut.C'> 1
classmethod <class '%(modname)s.C'> 1

In this example, the call to C.foo() from E.foo() will see class C as its
first argument, not class E. This is to be expected, since the call
specifies the class C. But it stresses the difference between these class
methods and methods defined in metaclasses (where an upcall to a metamethod
would pass the target class as an explicit first argument).
"""
""" % {'modname': __name__}

test_5 = """

Expand Down