首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从继承类的方法扩展列表

如何从继承类的方法扩展列表
EN

Stack Overflow用户
提问于 2020-03-09 22:43:34
回答 2查看 33关注 0票数 1

我有两个类: BaseClass和反欺诈,这是从BaseClass派生的。BaseClass中有一个方法,它有一个列表,如下所示:

代码语言:javascript
复制
class BaseClass:
    def __init__(self):
        pass

    def create_metrics(self):
        self.metrics_list = ['score',
                             'precision',
                             'recall']

我希望当我实例化反欺诈类时,加上'f1',列表self.metrics_list将与之前相同。我尝试过以下几种方法:

代码语言:javascript
复制
class Antifraud(BaseClass):

    def __init__(self):
        super().__init__()

        self.metrics_list.extend(['f1'])

a = Antifraud()

但是我得到了一个错误:

代码语言:javascript
复制
AttributeError: 'Antifraud' object has no attribute 'metrics_list'

我该如何解决我的问题呢?这有可能实现吗?谢谢

EN

回答 2

Stack Overflow用户

发布于 2020-03-09 22:52:59

您可以在之前调用create_metrics方法来扩展self.metrics_list,方法是调用您正在创建self.metrics_list的第一个create_metrics

代码语言:javascript
复制
class Antifraud(BaseClass):

    def __init__(self):
        super().__init__()
        self.create_metrics()
        self.metrics_list.extend(['f1'])
print(Antifraud().metrics_list)

输出:

代码语言:javascript
复制
['score', 'precision', 'recall', 'f1']
票数 1
EN

Stack Overflow用户

发布于 2020-03-09 22:50:24

不在__init__之外初始化实例的属性是一种不好的做法

您可以将BaseClass更新为

代码语言:javascript
复制
    class BaseClass:
        def __init__(self):
            self.metrics_list = ['score', 'precision', 'recall']

然后你的AntiFraud类就可以工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60602888

复制
相关文章

相似问题

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