[英]Dataclass subclass does not inherit __repr__
I am using Python dataclasses
module backported from Python 3.7. 我正在使用从Python 3.7向后移植的Python dataclasses
模块。 I stumbled upon this behavior where a dataclass subclass does not inherit __repr__
: 我偶然发现了数据类子类不继承__repr__
:
from dataclasses import dataclass
@dataclass
class Person:
name: str
def __repr__(self):
return f'{self.__class__.__qualname__}({self.name})'
def print_something(self):
return self.name
@dataclass
class Employee(Person):
title: str
Here is the output 这是输出
In [21]: e = Employee(name='Dmitry', title='Systems Engineer')
In [22]: p = Person(name='Dmitry')
In [23]: repr(e)
Out[23]: "Employee(name='Dmitry', title='Systems Engineer')"
In [24]: p = Person(name='Dmitry')
In [25]: repr(p)
Out[25]: 'Person(Dmitry)'
In [26]: p.print_something()
Out[26]: 'Dmitry'
In [27]: e = Employee(name='Dmitry', title='Systems Engineer')
In [28]: repr(e)
Out[28]: "Employee(name='Dmitry', title='Systems Engineer')"
In [29]: e.print_something()
Out[29]: 'Dmitry'
1) Why is this happening? 1)为什么会这样?
2) Is there a workaround for this behavior (except of redefining __repr__
in the subclass)? 2)是否有针对此行为的解决方法(除了在子类中重新定义__repr__
以外)?
This is happening because dataclass
automatically adds a __repr__
method, which just happens to be almost exactly the method you have in your base class, so you didn't notice. 这是发生,因为dataclass
自动添加一个__repr__
方法,这恰好是几乎完全在你的基类有方法,所以你没注意到。 Pass repr=False
for dataclass
not to add a repr: 为dataclass
传递repr=False
,不添加repr:
In [5]: from dataclasses import dataclass
...:
...: @dataclass(repr=False)
...: class Person:
...: name: str
...:
...: def __repr__(self):
...: return f'{self.__class__.__qualname__}({self.name})'
...:
...: def print_something(self):
...: return self.name
...:
...: @dataclass(repr=False)
...: class Employee(Person):
...: title: str
...:
In [6]: Person('foo')
Out[6]: Person(foo)
In [7]: Employee('foo', 'bar')
Out[7]: Employee(foo)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.