bpo-34213: Allow dataclasses to work with a field named 'object'. (GH… · python/cpython@4d12e4d (original) (raw)

`@@ -6,6 +6,7 @@

`

6

6

``

7

7

`import pickle

`

8

8

`import inspect

`

``

9

`+

import builtins

`

9

10

`import unittest

`

10

11

`from unittest.mock import Mock

`

11

12

`from typing import ClassVar, Any, List, Union, Tuple, Dict, Generic, TypeVar, Optional

`

`@@ -192,6 +193,55 @@ class C:

`

192

193

`first = next(iter(sig.parameters))

`

193

194

`self.assertEqual('self', first)

`

194

195

``

``

196

`+

def test_field_named_object(self):

`

``

197

`+

@dataclass

`

``

198

`+

class C:

`

``

199

`+

object: str

`

``

200

`+

c = C('foo')

`

``

201

`+

self.assertEqual(c.object, 'foo')

`

``

202

+

``

203

`+

def test_field_named_object_frozen(self):

`

``

204

`+

@dataclass(frozen=True)

`

``

205

`+

class C:

`

``

206

`+

object: str

`

``

207

`+

c = C('foo')

`

``

208

`+

self.assertEqual(c.object, 'foo')

`

``

209

+

``

210

`+

def test_field_named_like_builtin(self):

`

``

211

`+

Attribute names can shadow built-in names

`

``

212

`+

since code generation is used.

`

``

213

`+

Ensure that this is not happening.

`

``

214

`+

exclusions = {'None', 'True', 'False'}

`

``

215

`+

builtins_names = sorted(

`

``

216

`+

b for b in builtins.dict.keys()

`

``

217

`+

if not b.startswith('__') and b not in exclusions

`

``

218

`+

)

`

``

219

`+

attributes = [(name, str) for name in builtins_names]

`

``

220

`+

C = make_dataclass('C', attributes)

`

``

221

+

``

222

`+

c = C(*[name for name in builtins_names])

`

``

223

+

``

224

`+

for name in builtins_names:

`

``

225

`+

self.assertEqual(getattr(c, name), name)

`

``

226

+

``

227

`+

def test_field_named_like_builtin_frozen(self):

`

``

228

`+

Attribute names can shadow built-in names

`

``

229

`+

since code generation is used.

`

``

230

`+

Ensure that this is not happening

`

``

231

`+

for frozen data classes.

`

``

232

`+

exclusions = {'None', 'True', 'False'}

`

``

233

`+

builtins_names = sorted(

`

``

234

`+

b for b in builtins.dict.keys()

`

``

235

`+

if not b.startswith('__') and b not in exclusions

`

``

236

`+

)

`

``

237

`+

attributes = [(name, str) for name in builtins_names]

`

``

238

`+

C = make_dataclass('C', attributes, frozen=True)

`

``

239

+

``

240

`+

c = C(*[name for name in builtins_names])

`

``

241

+

``

242

`+

for name in builtins_names:

`

``

243

`+

self.assertEqual(getattr(c, name), name)

`

``

244

+

195

245

`def test_0_field_compare(self):

`

196

246

`# Ensure that order=False is the default.

`

197

247

`@dataclass

`