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

gh-115450: Fix direct invocation of `test_desctut` (GH-115451)
(cherry picked from commit ec8909a239)

Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
This commit is contained in:
Miss Islington (bot) 2024-02-14 15:04:23 +01:00 committed by GitHub
parent c274fe7534
commit 1a8165012d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -40,16 +40,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
@ -100,7 +100,7 @@ def merge(self, other):
>>> print(sortdict(a.__dict__))
{'default': -1000, 'x1': 100, 'x2': 200}
>>>
"""
""" % {'modname': __name__}
class defaultdict2(dict):
__slots__ = ['default']
@ -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
@ -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 = """