我有两个类: BaseClass和反欺诈,这是从BaseClass派生的。BaseClass中有一个方法,它有一个列表,如下所示:
class BaseClass:
def __init__(self):
pass
def create_metrics(self):
self.metrics_list = ['score',
'precision',
'recall']我希望当我实例化反欺诈类时,加上'f1',列表self.metrics_list将与之前相同。我尝试过以下几种方法:
class Antifraud(BaseClass):
def __init__(self):
super().__init__()
self.metrics_list.extend(['f1'])
a = Antifraud()但是我得到了一个错误:
AttributeError: 'Antifraud' object has no attribute 'metrics_list'我该如何解决我的问题呢?这有可能实现吗?谢谢
发布于 2020-03-09 22:52:59
您可以在之前调用create_metrics方法来扩展self.metrics_list,方法是调用您正在创建self.metrics_list的第一个create_metrics
class Antifraud(BaseClass):
def __init__(self):
super().__init__()
self.create_metrics()
self.metrics_list.extend(['f1'])
print(Antifraud().metrics_list)输出:
['score', 'precision', 'recall', 'f1']发布于 2020-03-09 22:50:24
不在__init__之外初始化实例的属性是一种不好的做法
您可以将BaseClass更新为
class BaseClass:
def __init__(self):
self.metrics_list = ['score', 'precision', 'recall']然后你的AntiFraud类就可以工作了。
https://stackoverflow.com/questions/60602888
复制相似问题