多个返回函数的构造函数参数

时间:2019-05-21 19:33:05

标签: python

我有一个带有两个属性的类和一个返回两个属性的函数。 当我要初始化新对象时,为什么不能将此函数作为构造函数参数传递。

我找到了一个解决方案,但我想知道为什么第一个选项不起作用。 谢谢!


class Box:
    color = None
    size = None
    def __init__(self, color, size):
        self.color = color
        self.size = size

    def box_properties(self):
        print(self.color,self.size)



def default_box():
    first="Blue"
    second="Medium"
    return first, second


# THIS WORKS :
first, second = default_box()
my_box = Box(first, second)
my_box.box_properties()            


# THIS DOESN'T WORK :
my_box = Box(default_box()) 
my_box.box_properties()            



第一个打印出来:像我预期的那样是蓝色介质

第二个给我错误: init ()缺少1个必需的位置参数:“ size”

为什么?

1 个答案:

答案 0 :(得分:4)

问题是default_box()返回一个项,两个元素的tuple包含firstsecond。您需要将其解压缩为Box

的参数
x = default_box()
x
# ("Blue", "Medium")

# You can unpack the variable explicitly
my_box = Box(*x)

# or the function call
my_box = Box(*default_box())