mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-32492: 1.6x speed up in namedtuple attribute access using C fast-path (#10495)
* bpo-32492: 2.5x speed up in namedtuple attribute access using C fast path * Add News entry * fixup! bpo-32492: 2.5x speed up in namedtuple attribute access using C fast path * Check for tuple in the __get__ of the new descriptor and don't cache the descriptor itself * Don't inherit from property. Implement GC methods to handle __doc__ * Add a test for the docstring substitution in descriptors * Update NEWS entry to reflect time against 3.7 branch * Simplify implementation with argument clinic, better error messages, only __new__ * Use positional-only parameters for the __new__ * Use PyTuple_GET_SIZE and PyTuple_GET_ITEM to tighter the implementation of tuplegetterdescr_get * Implement __set__ to make tuplegetter a data descriptor * Use Py_INCREF now that we inline PyTuple_GetItem * Apply the valid_index() function, saving one test * Move Py_None test out of the critical path.
This commit is contained in:
parent
b0a6196ffd
commit
3f5fc70c62
5 changed files with 211 additions and 4 deletions
|
@ -514,6 +514,14 @@ class TestNamedTuple(unittest.TestCase):
|
|||
a.w = 5
|
||||
self.assertEqual(a.__dict__, {'w': 5})
|
||||
|
||||
def test_namedtuple_can_mutate_doc_of_descriptors_independently(self):
|
||||
A = namedtuple('A', 'x y')
|
||||
B = namedtuple('B', 'x y')
|
||||
A.x.__doc__ = 'foo'
|
||||
B.x.__doc__ = 'bar'
|
||||
self.assertEqual(A.x.__doc__, 'foo')
|
||||
self.assertEqual(B.x.__doc__, 'bar')
|
||||
|
||||
|
||||
################################################################################
|
||||
### Abstract Base Classes
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue