Kaydet (Commit) 934aba66 authored tarafından Guido van Rossum's avatar Guido van Rossum

Issue #29377: Add three new wrappers to types.py (Manuel Krebber).

üst 72268ae1
...@@ -132,6 +132,29 @@ Standard names are defined for the following types: ...@@ -132,6 +132,29 @@ Standard names are defined for the following types:
C".) C".)
.. data:: SlotWrapperType
The type of methods of some built-in data types and base classes such as
:meth:`object.__init__` or :meth:`object.__lt__`.
.. versionadded:: 3.7
.. data:: MethodWrapperType
The type of *bound* methods of some built-in data types and base classes.
For example it is the type of :code:`object().__str__`.
.. versionadded:: 3.7
.. data:: MethodDescriptorType
The type of methods of some built-in data types such as :meth:`str.join`.
.. versionadded:: 3.7
.. class:: ModuleType(name, doc=None) .. class:: ModuleType(name, doc=None)
The type of :term:`modules <module>`. Constructor takes the name of the The type of :term:`modules <module>`. Constructor takes the name of the
......
...@@ -576,6 +576,24 @@ class TypesTests(unittest.TestCase): ...@@ -576,6 +576,24 @@ class TypesTests(unittest.TestCase):
self.assertGreater(object.__basicsize__, 0) self.assertGreater(object.__basicsize__, 0)
self.assertGreater(tuple.__itemsize__, 0) self.assertGreater(tuple.__itemsize__, 0)
def test_slot_wrapper_types(self):
self.assertIsInstance(object.__init__, types.SlotWrapperType)
self.assertIsInstance(object.__str__, types.SlotWrapperType)
self.assertIsInstance(object.__lt__, types.SlotWrapperType)
self.assertIsInstance(int.__lt__, types.SlotWrapperType)
def test_method_wrapper_types(self):
self.assertIsInstance(object().__init__, types.MethodWrapperType)
self.assertIsInstance(object().__str__, types.MethodWrapperType)
self.assertIsInstance(object().__lt__, types.MethodWrapperType)
self.assertIsInstance((42).__lt__, types.MethodWrapperType)
def test_method_descriptor_types(self):
self.assertIsInstance(str.join, types.MethodDescriptorType)
self.assertIsInstance(list.append, types.MethodDescriptorType)
self.assertIsInstance(''.join, types.BuiltinMethodType)
self.assertIsInstance([].append, types.BuiltinMethodType)
class MappingProxyTests(unittest.TestCase): class MappingProxyTests(unittest.TestCase):
mappingproxy = types.MappingProxyType mappingproxy = types.MappingProxyType
......
...@@ -36,6 +36,10 @@ MethodType = type(_C()._m) ...@@ -36,6 +36,10 @@ MethodType = type(_C()._m)
BuiltinFunctionType = type(len) BuiltinFunctionType = type(len)
BuiltinMethodType = type([].append) # Same as BuiltinFunctionType BuiltinMethodType = type([].append) # Same as BuiltinFunctionType
SlotWrapperType = type(object.__init__)
MethodWrapperType = type(object().__str__)
MethodDescriptorType = type(str.join)
ModuleType = type(sys) ModuleType = type(sys)
try: try:
......
...@@ -223,6 +223,10 @@ Extension Modules ...@@ -223,6 +223,10 @@ Extension Modules
Library Library
------- -------
- Issue #29377: Add SlotWrapperType, MethodWrapperType, and
MethodDescriptorType built-in types to types module.
Original patch by Manuel Krebber.
- Issue #29218: Unused install_misc command is now removed. It has been - Issue #29218: Unused install_misc command is now removed. It has been
documented as unused since 2000. Patch by Eric N. Vander Weele. documented as unused since 2000. Patch by Eric N. Vander Weele.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment