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

卢卡斯·里贝罗(Lucas Ribeiro)

我有一个AbstractDataHandle类,他的init方法和一个Classifier类。我想在Classifier中有两个类似Java的构造函数。其中一个继承自它的超类,另一个是全新的。

就像(但我打算“保留”这两个构造函数):

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)

我可以在一堂课中有两个构造函数吗?如果是,我可以从超类继承一个构造函数,并添加一个新的吗?

先感谢您。

阿巴内特

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

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

有几种解决方法。


使用@classmethods作为备用构造函数:

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,可以用被构造nowfromtimestamp或一些其他的替代构造,除了默认


使用默认值,仅关键字和/或变量参数的参数来制作一个可以以不同方式调用的构造函数:

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)

当然,在任何情况下都不可能在没有垃圾邮件的情况下享用早餐。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python和构造函数中的多重继承

来自分类Dev

构造函数在继承的类python中失败

来自分类Dev

构造函数中的继承

来自分类Dev

F#中的多个构造函数和类继承

来自分类Dev

Java中的构造函数继承

来自分类Dev

继承java中的构造函数

来自分类Dev

使用super()时未调用Python多继承构造函数

来自分类Dev

JAVA多个构造函数和IF与继承

来自分类Dev

JAVA多个构造函数和IF与继承

来自分类Dev

'this'在构造函数和继承的构造函数中是不同的

来自分类Dev

'this'在构造函数和继承的构造函数中是不同的

来自分类Dev

是在python中继承的构造函数吗

来自分类Dev

Python继承调用构造函数问题

来自分类Dev

多重继承中的构造函数调用序列

来自分类Dev

继承和构造函数中的错误

来自分类Dev

在多级继承中查找构造函数

来自分类Dev

在继承中更改构造函数的顺序

来自分类Dev

使用继承的类时处理构造函数

来自分类Dev

Spring 使用构造函数参数继承了 @Component

来自分类Dev

Prolog中的多个构造函数

来自分类Dev

Prolog中的多个构造函数

来自分类Dev

当父类在 C++ 中没有默认构造函数时,如何在继承的类中使用构造函数?

来自分类Dev

Scala:在Scala中使用Java中的多个构造函数

来自分类Dev

调用由多个类继承的类的构造函数

来自分类Dev

当有多个可能的类型构造函数时,如何使用数据类型中的特定构造函数

来自分类Dev

删除构造函数继承

来自分类Dev

继承构造函数与转发

来自分类Dev

继承Java构造函数

来自分类Dev

Javascript构造函数继承