栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

构造函数必须命名

__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):    passclass HealthyBreakfast(object):    def __init__(self, spam):        self.spam, self.eggs = spam, 0class 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, eggsclass HealthyBreakfast(object):    def __init__(self, spam):        super(HealthyBreakfast, self).__init__(0, spam)

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/373442.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号