Skip to content

Commit 1bc255b

Browse files
committed
Directly access class methods in introspection (fixes #966)
inspect.signature is unable to process classmethod instances. So we directly access the member via its __get__.
1 parent 1332d18 commit 1bc255b

File tree

2 files changed

+3
-1
lines changed

2 files changed

+3
-1
lines changed

bpython/inspection.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,9 @@ def getattr_safe(obj: Any, name: str) -> Any:
358358
# Slots are a MemberDescriptorType
359359
if isinstance(result, MemberDescriptorType):
360360
result = getattr(obj, name)
361+
# classmethods are safe to access (see #966)
362+
if isinstance(result, classmethod):
363+
result = result.__get__(obj, obj)
361364
return result
362365

363366

bpython/test/test_inspection.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,6 @@ def fun_annotations(number: int, lst: List[int] = []) -> List[int]:
180180
self.assertEqual(props.argspec.args, ["number", "lst"])
181181
self.assertEqual(props.argspec.defaults[0], [])
182182

183-
@unittest.expectedFailure
184183
def test_issue_966_class_method(self):
185184
class Issue966(Sequence):
186185
@classmethod

0 commit comments

Comments
 (0)