gpt4 book ai didi

python - python中的多个构造函数,使用继承

转载 作者:太空狗 更新时间:2023-10-29 17:52:01 25 4
gpt4 key购买 nike

我有一个 AbstractDataHandle 类及其 init 方法和一个分类器类。我想在 Classifier 中有两个构造函数,类似于 Java。一个继承自它的父类(super class),一个是全新的。

它会是这样的(但我打算“保留”这两个构造函数):

class AbstractDataHandle():
def __init__(self, elements, attributes, labels):
self._load(elements, attributes, labels)


class Classifier(AbstractDataHandle):
def __init__(self, classifier="LinearSVC", proba=False):
self._fit(classifier, proba)

我可以在一个类中有两个构造函数吗?如果是,我可以从父类(super class)继承一个构造函数,然后添加一个新构造函数吗?

提前谢谢你。

最佳答案

一个类中不能有两个构造函数。

构造函数必须命名为__init__。而且,与 Java 不同,Python 不允许根据参数类型重载函数或方法。因此,如果您有两个构造函数,它们将是同一个函数。

有几种解决方法。


使用@classmethod作为替代构造函数:

class Breakfast(object):
@classmethod
def from_eggs(cls, eggs):
obj = cls()
obj.spam, obj.eggs = 5, eggs
return obj

@classmethod
def from_spam_and_eggs(cls, spam, eggs):
obj = cls()
obj.spam, obj.eggs = spam, eggs
return obj

标准库中的一个简单示例是datetime.datetime,它可以用now 构造。 , fromtimestamp ,或其他一些替代构造函数,除了 default .


使用默认值、仅关键字和/或可变参数参数来创建可以以不同方式调用的单个构造函数:

class Breakfast(object):
def __init__(self, eggs=0, spam=5):
self.spam, self.eggs = spam, eggs

int是这样的一个例子:您可以从字符串和基数创建它,或者从知道如何将自身转换为整数的单个参数创建它。


创建每个具有不同构造函数的子类:

class Breakfast(object):
pass

class HealthyBreakfast(object):
def __init__(self, spam):
self.spam, self.eggs = spam, 0

class NormalBreakfast(object):
def __init__(self, spam, eggs):
self.spam, self.eggs = spam, eggs

在任何这些情况下,您都可以将共性分解为单个“基本”初始化程序。例如:

class Breakfast(object):
def __init__(self, eggs, spam):
self.spam, self.eggs = spam, eggs

class HealthyBreakfast(object):
def __init__(self, spam):
super(HealthyBreakfast, self).__init__(0, spam)

当然,没有垃圾邮件是不可能吃早餐的。

关于python - python中的多个构造函数,使用继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19305296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com