Dataclass子类不继承\uu repr__

2024-06-01 21:10:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python3.7后端口的Pythondataclasses模块。 我偶然发现了一个dataclass子类没有继承__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

这是输出

^{pr2}$

1)为什么会发生这种情况?
2) 对于这种行为是否有解决方法(除了在子类中重新定义__repr__)?在


Tags: 模块端口namefromselfreturndef子类
1条回答
网友
1楼 · 发布于 2024-06-01 21:10:18

发生这种情况是因为dataclass自动添加了一个__repr__方法,而这个方法恰好是基类中的方法,所以您没有注意到。为repr=False传递dataclass不添加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)

相关问题 更多 >