Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在python中不可能让一个objects方法在一个新的objects\uu init\uu方法中返回一个元组作为参数?_Python_Python 3.x_Oop_Object_Tuples - Fatal编程技术网

为什么在python中不可能让一个objects方法在一个新的objects\uu init\uu方法中返回一个元组作为参数?

为什么在python中不可能让一个objects方法在一个新的objects\uu init\uu方法中返回一个元组作为参数?,python,python-3.x,oop,object,tuples,Python,Python 3.x,Oop,Object,Tuples,为什么不能让objects方法在新的objectsinit方法中返回元组作为参数?为什么下面的代码不起作用,需要做什么才能使它起作用 class AcceptsTupleOnInit: def __init__(self,s,z): self.s = s self.z = z class ReturnsTuple: def return_tuple(self): return

为什么不能让objects方法在新的objectsinit方法中返回元组作为参数?为什么下面的代码不起作用,需要做什么才能使它起作用

   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())

AcceptsTupleOnInit
不将元组作为参数;它需要两个独立的参数。您需要首先解压缩元组

a = AcceptsTupleOnInit(*r.return_tuple())
或者,定义
\uuuu init\uuuu
以接受元组

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])

在这三种情况下,您都有责任提供至少有2个值的元组。
\uuuu init\uuuu
的原始定义要求
返回\u tuple
提供正好包含2个元素的tuple;修改后的
\uuuu init\uuuu
和类方法更灵活,只需忽略其他元素。这就是为什么我更喜欢原始的
\uuuu init\uuuu
(它精确地说明了它需要什么和接受什么)带有一个类方法,可以根据需要清理输入元组。您可以选择忽略
t[2:]
,或者如果存在异常,则可以引发异常。

AcceptsTupleOnInit
不将元组作为参数;它需要两个独立的参数。您需要首先解压缩元组

a = AcceptsTupleOnInit(*r.return_tuple())
或者,定义
\uuuu init\uuuu
以接受元组

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])

在这三种情况下,您都有责任提供至少有2个值的元组。
\uuuu init\uuuu
的原始定义要求
返回\u tuple
提供正好包含2个元素的tuple;修改后的
\uuuu init\uuuu
和类方法更灵活,只需忽略其他元素。这就是为什么我更喜欢原始的
\uuuu init\uuuu
(它精确地说明了它需要什么和接受什么)带有一个类方法,可以根据需要清理输入元组。您可以选择忽略
t[2:][/code>,或者如果存在异常,您可以提出异常。

这是否回答了您的问题?这回答了你的问题吗?