为什么在python中不可能有一个object方法返回一个元组作为新对象__init__方法中的参数?

为什么不可能有一个object方法在新的 init 方法中返回一个元组作为参数?为什么以下代码不起作用,需要做些什么才能使其起作用?

   class acceptsTupleonInit:
        def __init__(self,s,z):
            self.s = s
            self.z = z

    class ReturnsTuple:
        def return_tuple(self):
            return ("1","2")

    r = ReturnsTuple()    
    a = acceptsTupleonInit(r.return_tuple())
jenny013 回答:为什么在python中不可能有一个object方法返回一个元组作为新对象__init__方法中的参数?

AcceptsTupleOnInit不以元组为参数;它需要两个单独的参数。您需要先打开元组的包装。

a = AcceptsTupleOnInit(*r.return_tuple())

或者,定义__init__以接受元组

def __init__(self,t):
    self.s = t[0]
    self.z = t[1]

或者更好,定义一个附加的类方法来为您解包元组。

# usage:
# a = AcceptsTupleOnInit.from_tuple(r.return_tuple())
@classmethod
def from_tuple(cls,t):
    return cls(t[0],t[1])

在所有三种情况下,您都有责任提供一个至少包含两个值的元组。 __init__的原始定义要求return_tuple提供一个完全是 2个元素的元组;修改后的__init__和class方法更加灵活,将忽略其他元素。这就是为什么我更喜欢原始的__init__(确切地说,它需要和接受的东西)和可以根据需要清理输入元组的类方法。您可以选择忽略t[2:],或者如果存在则引发异常。

本文链接:https://www.f2er.com/3128570.html

大家都在问