如何将类值用作多个子类的默认值?

时间:2017-05-29 18:53:53

标签: python python-3.x

我确信这很简单,但我很新。

我有一组课程。我们来电话

class Parent:

    def __init__(self, name, color):
        self.name = name
        self.color = color

class Mix: 
    def BMethod(self):
        return '{0} is right'

class Child(Parent, Mix):
    def __init__(self, name, color, type):
        self.type = 'AAA'
        self.color = 'None'
        super(Child,self).__init__(name,color)

    def __str__(self):
        return '{0} is a {1} {2}.'.format(self.name,self.color,self.type)

class ChildSubType(Child, Mix):
    def __init__(self, name, color, type):
        color = 'None'
        kind = super().kind
        super(ChildSubType,self).__init__(name,color,type)

    def __str__(self):
        return "{0} is not a {1} {2}".format(self.name,self.color.self.type)


childsubtype = ChildSubType(
    "Name1"
    ,"White"
)

print(childsubtype)

当我运行此代码时,出现“TypeError: __init__() missing 1 required positional argument: 'type'

错误

基本上,我的目标是,对于ChildSubType,我只需要放入Name,如果我没有放入Color或Type,那么它将默认为ChildSubType类中的值颜色,它将默认为类型的Child类。

我不完全确定如何实现这一点。

我认为它与ChildSubType中的def __init__方法有关,但我并不是100%清楚它应该做什么。在这一点上,我基本上都遵循了指示,并且已经触及了这个障碍。

对于它的价值,我还尝试使用Child运行它而不使用ChildSubType并遇到同样的错误。我想我只是不知道如何使用类中的默认值。

编辑: 好吧,我想我已经开始工作了。我更新了代码,为其提供了注释中建议的默认值。

以下是我改变的内容:

Class Child(Parent, Mix):
    def __init__(self, name, color, **type = 'AAA'**):
        self.type = 'AAA'
        self.color = 'None'
        super(Child,self).__init__(name,color)

    def __str__(self):
        return '{0} is a {1} {2}.'.format(self.name,self.color,self.type)

class ChildSubType(Child, Mix):
    def __init__(self, name, color, **type = super(type)**):
        color = 'None'
        kind = super().kind
        super(ChildSubType,self).__init__(name,color,type)

1 个答案:

答案 0 :(得分:3)

目前,您的__init__方法包含3个初始化变量,但在创建对象时只传递2个。我建议使用默认值,如下所示:

def __init__(self, name, color='None', type=None):