mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-34213: Allow dataclasses to work with a field named 'object'. (GH-8452)
This commit is contained in:
parent
65b5ef02ec
commit
4d12e4dc28
3 changed files with 58 additions and 1 deletions
|
@ -6,6 +6,7 @@ from dataclasses import *
|
|||
|
||||
import pickle
|
||||
import inspect
|
||||
import builtins
|
||||
import unittest
|
||||
from unittest.mock import Mock
|
||||
from typing import ClassVar, Any, List, Union, Tuple, Dict, Generic, TypeVar, Optional
|
||||
|
@ -192,6 +193,55 @@ class TestCase(unittest.TestCase):
|
|||
first = next(iter(sig.parameters))
|
||||
self.assertEqual('self', first)
|
||||
|
||||
def test_field_named_object(self):
|
||||
@dataclass
|
||||
class C:
|
||||
object: str
|
||||
c = C('foo')
|
||||
self.assertEqual(c.object, 'foo')
|
||||
|
||||
def test_field_named_object_frozen(self):
|
||||
@dataclass(frozen=True)
|
||||
class C:
|
||||
object: str
|
||||
c = C('foo')
|
||||
self.assertEqual(c.object, 'foo')
|
||||
|
||||
def test_field_named_like_builtin(self):
|
||||
# Attribute names can shadow built-in names
|
||||
# since code generation is used.
|
||||
# Ensure that this is not happening.
|
||||
exclusions = {'None', 'True', 'False'}
|
||||
builtins_names = sorted(
|
||||
b for b in builtins.__dict__.keys()
|
||||
if not b.startswith('__') and b not in exclusions
|
||||
)
|
||||
attributes = [(name, str) for name in builtins_names]
|
||||
C = make_dataclass('C', attributes)
|
||||
|
||||
c = C(*[name for name in builtins_names])
|
||||
|
||||
for name in builtins_names:
|
||||
self.assertEqual(getattr(c, name), name)
|
||||
|
||||
def test_field_named_like_builtin_frozen(self):
|
||||
# Attribute names can shadow built-in names
|
||||
# since code generation is used.
|
||||
# Ensure that this is not happening
|
||||
# for frozen data classes.
|
||||
exclusions = {'None', 'True', 'False'}
|
||||
builtins_names = sorted(
|
||||
b for b in builtins.__dict__.keys()
|
||||
if not b.startswith('__') and b not in exclusions
|
||||
)
|
||||
attributes = [(name, str) for name in builtins_names]
|
||||
C = make_dataclass('C', attributes, frozen=True)
|
||||
|
||||
c = C(*[name for name in builtins_names])
|
||||
|
||||
for name in builtins_names:
|
||||
self.assertEqual(getattr(c, name), name)
|
||||
|
||||
def test_0_field_compare(self):
|
||||
# Ensure that order=False is the default.
|
||||
@dataclass
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue