Karthikeyan Singaravelan <tir.kar...@gmail.com> added the comment:

https://docs.python.org/3/library/dataclasses.html#inheritance

> When the dataclass is being created by the dataclass() decorator, it looks 
> through all of the class’s base classes in reverse MRO (that is, starting at 
> object) and, for each dataclass that it finds, adds the fields from that base 
> class to an ordered mapping of fields. After all of the base class fields are 
> added, it adds its own fields to the ordered mapping. All of the generated 
> methods will use this combined, calculated ordered mapping of fields. Because 
> the fields are in insertion order, derived classes override base classes.

I think here in the example __eq__ is defined in A and is inherited by B but 
since eq=False is not explicitly defined in the decorator the dataclass will 
use it's own definition of eq and override it at [0] . So using eq=False will 
work as expected. I propose closing this as not a bug. 


import dataclasses


@dataclasses.dataclass
class A:
    def __eq__(self, other):
        return True


@dataclasses.dataclass(eq=False) # By default eq=True
class B(A):
    pass


print(A() == 1) # Returns True as expected
print(B() == 1) # Returns True since inherited A.__eq__ is not overriden with 
eq=False


Output

./python.exe ../backups/bpo37485.py
True
True

[0] 
https://github.com/python/cpython/blob/7cb9204ee1cf204f6f507d99a60f7c5bb359eebb/Lib/dataclasses.py#L922

----------
nosy: +xtreak

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue37485>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to