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不允许按参数类型重载函数或方法。因此,如果您有两个构造函数,则它们都将是同一函数。
有几种解决方法。
使用@classmethod
s作为备用构造函数:
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
或一些其他的替代构造,除了默认。
使用默认值,仅关键字和/或变量参数的参数来制作一个可以以不同方式调用的构造函数:
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