首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dataclass子类不继承__repr__

Dataclass子类不继承__repr__
EN

Stack Overflow用户
提问于 2018-10-31 19:46:44
回答 1查看 2K关注 0票数 14

我正在使用Python3.7中支持的Python3.7模块。我偶然发现了这样的行为: dataclass子类不继承__repr__

代码语言:javascript
复制
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

这是输出

代码语言:javascript
复制
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)为何会出现这种情况?

2)这种行为有解决办法(除了在子类中重新定义__repr__之外)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-31 19:51:07

之所以会发生这种情况,是因为dataclass自动添加了一个__repr__方法,这个方法恰好恰好是基类中的方法,所以您没有注意到。传递repr=False for dataclass以不添加repr:

代码语言:javascript
复制
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)
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53090915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档