[Python-Dev] PEP 557: Data Classes
sf at fermigier.com
Thu Oct 12 03:36:46 EDT 2017
On Wed, Oct 11, 2017 at 10:33 PM, Mike Miller <python-dev at mgmiller.net>
> (Apologies for reviving a dead horse, but may not be around at the blessed
> As potential names of this concept, I liked record and row, but agreed
> they were a bit too specific and not quite exact. In my recent (unrelated)
> reading however, I came across another term and think it might fit better,
> called an "entity."
I'm not familiar with ER modelling but I would advise against using the
term "entity", as it has, in domain-driven design (DDD) a very specific
"An object that is not defined by its attributes, but rather by a thread of
continuity and its identity." (from
See also the more general Wikipedia definition "An entity is something that
exists as itself, as a subject or as an object, actually or potentially,
concretely or abstractly, physically or not." (
In the context of DDD, entities are usually opposed to value objects: "An
object that contains attributes but has no conceptual identity. They should
be treated as immutable.". (
Attrs, and by extension the dataclass proposal (I guess), provide some
support for both:
- Providing support for quickly constructing immutable objects from a bag
of attributes, and providing equality based on those attributes, it helps
implement Value Objects (not sure much more is needed actually)
- By supporting equality based on some "primary key", it will also help
with maintaining the concept of "equality" in entities.
It would be great if the dataclass proposal could help implement DDD
technical concepts in Python, but its terminology should not conflict the
DDD terminology, if we want to avoid confusion.
Stefane Fermigier - http://fermigier.com/ - http://twitter.com/sfermigier -
Founder & CEO, Abilian - Enterprise Social Software -
Chairman, Free&OSS Group / Systematic Cluster -
Co-Chairman, National Council for Free & Open Source Software (CNLL) -
Founder & Organiser, PyData Paris - http://pydata.fr/
“You never change things by ﬁghting the existing reality. To change
something, build a new model that makes the existing model obsolete.” — R.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Python-Dev