您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

构造函数必须命名__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 2022/1/1 18:27:23 有192人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶