Py学习  »  Python

为什么在python中不能让objects方法在新的objects in it方法中返回元组作为参数?

jay123 • 4 年前 • 705 次点击  

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

   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())
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49408
 
705 次点击  
文章 [ 1 ]  |  最新文章 4 年前
chepner
Reply   •   1 楼
chepner    4 年前

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

在这三种情况下,您都有责任提供至少有两个值的元组。最初的定义 __初始__ 要求 return_tuple 提供一个元组 确切地 2个元素;修改的 __初始__ 类方法更灵活,简单地忽略其他元素。所以我更喜欢原版的 __初始__ (关于它需要什么和接受什么是精确的)使用一个类方法,该方法可以根据需要清理输入元组。你可以选择忽略 t[2:] ,或者如果它们存在,则可以引发异常。