社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

jay123 • 5 年前 • 1786 次点击  

为什么不能让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
 
1786 次点击  
文章 [ 1 ]  |  最新文章 5 年前
chepner
Reply   •   1 楼
chepner    5 年前

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:] ,或者如果它们存在,则可以引发异常。