Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4e08fbc

Browse files
gh-93021: Fix __text_signature__ for __get__ (GH-93023)
Because of the way wrap_descr_get is written, the second argumentto __get__ methods implemented through the wrapper is alwaysoptional.
1 parentdd5cf84 commit4e08fbc

File tree

3 files changed

+10
-2
lines changed

3 files changed

+10
-2
lines changed

‎Lib/test/test_types.py‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,12 @@ def test_slot_wrapper_types(self):
597597
self.assertIsInstance(object.__lt__,types.WrapperDescriptorType)
598598
self.assertIsInstance(int.__lt__,types.WrapperDescriptorType)
599599

600+
deftest_dunder_get_signature(self):
601+
sig=inspect.signature(object.__init__.__get__)
602+
self.assertEqual(list(sig.parameters), ["instance","owner"])
603+
# gh-93021: Second parameter is optional
604+
self.assertIs(sig.parameters["owner"].default,None)
605+
600606
deftest_method_wrapper_types(self):
601607
self.assertIsInstance(object().__init__,types.MethodWrapperType)
602608
self.assertIsInstance(object().__str__,types.MethodWrapperType)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix the:attr:`__text_signature__` for:meth:`__get__` methods implemented
2+
in C. Patch by Jelle Zijlstra.

‎Objects/typeobject.c‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7184,7 +7184,7 @@ wrap_descr_get(PyObject *self, PyObject *args, void *wrapped)
71847184
obj=NULL;
71857185
if (type==Py_None)
71867186
type=NULL;
7187-
if (type==NULL&&obj==NULL) {
7187+
if (type==NULL&&obj==NULL) {
71887188
PyErr_SetString(PyExc_TypeError,
71897189
"__get__(None, None) is invalid");
71907190
returnNULL;
@@ -8209,7 +8209,7 @@ static slotdef slotdefs[] = {
82098209
TPSLOT("__next__",tp_iternext,slot_tp_iternext,wrap_next,
82108210
"__next__($self, /)\n--\n\nImplement next(self)."),
82118211
TPSLOT("__get__",tp_descr_get,slot_tp_descr_get,wrap_descr_get,
8212-
"__get__($self, instance, owner, /)\n--\n\nReturn an attribute of instance, which is of type owner."),
8212+
"__get__($self, instance, owner=None, /)\n--\n\nReturn an attribute of instance, which is of type owner."),
82138213
TPSLOT("__set__",tp_descr_set,slot_tp_descr_set,wrap_descr_set,
82148214
"__set__($self, instance, value, /)\n--\n\nSet an attribute of instance to value."),
82158215
TPSLOT("__delete__",tp_descr_set,slot_tp_descr_set,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp