Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
d1388921
Commit
d1388921
authored
Jan 07, 2018
by
Eric V. Smith
Committed by
GitHub
Jan 07, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bpo-32506: Change dataclasses from OrderedDict to plain dict. (gh-5131)
parent
b216a253
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
10 additions
and
8 deletions
+10
-8
Lib/dataclasses.py
Lib/dataclasses.py
+8
-8
Misc/NEWS.d/next/Library/2018-01-07-11-32-42.bpo-32506.MaT-zU.rst
...S.d/next/Library/2018-01-07-11-32-42.bpo-32506.MaT-zU.rst
+2
-0
No files found.
Lib/dataclasses.py
View file @
d1388921
import
sys
import
types
from
copy
import
deepcopy
import
collections
import
inspect
__all__
=
[
'dataclass'
,
...
...
@@ -448,11 +447,11 @@ def _set_attribute(cls, name, value):
def
_process_class
(
cls
,
repr
,
eq
,
order
,
hash
,
init
,
frozen
):
#
Use an OrderedDict because:
#
- Order matters!
#
- Derived class fields overwrite base class fields, but the
#
order
is defined by the base class, which is found first.
fields
=
collections
.
OrderedDict
()
#
Now that dicts retain insertion order, there's no reason to use
#
an ordered dict. I am leveraging that ordering here, because
#
derived class fields overwrite base class fields, but the order
# is defined by the base class, which is found first.
fields
=
{}
# Find our base classes in reverse MRO order, and exclude
# ourselves. In reversed order so that more derived classes
...
...
@@ -612,7 +611,8 @@ def fields(class_or_instance):
except
AttributeError
:
raise
TypeError
(
'must be called with a dataclass type or instance'
)
# Exclude pseudo-fields.
# Exclude pseudo-fields. Note that fields is sorted by insertion
# order, so the order of the tuple is as the fields were defined.
return
tuple
(
f
for
f
in
fields
.
values
()
if
f
.
_field_type
is
_FIELD
)
...
...
@@ -735,7 +735,7 @@ def make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True,
# Copy namespace since we're going to mutate it.
namespace
=
namespace
.
copy
()
anns
=
collections
.
OrderedDict
()
anns
=
{}
for
item
in
fields
:
if
isinstance
(
item
,
str
):
name
=
item
...
...
Misc/NEWS.d/next/Library/2018-01-07-11-32-42.bpo-32506.MaT-zU.rst
0 → 100644
View file @
d1388921
Now that dict is defined as keeping insertion order, drop OrderedDict and
just use plain dict.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment