为什么不可能在新的对象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())
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__
的方法和类方法更加灵活,将忽略其他元素。这就是为什么我偏爱原始方法__init__
(精确地说明其要求和接受的条件)以及可以根据需要清理输入元组的类方法。您可以选择忽略t[2:]
,也可以引发异常(如果存在)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句