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

我有一个AbstractDataHandle类,他的

方法和一个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)


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

以上是 python中的多个构造函数,使用继承 的全部内容, 来源链接: utcz.com/qa/401286.html

回到顶部