Je ne vais pas vous dire pourquoi de multiples tuple déballage ne fait pas partie de Python, mais je ferai remarquer que vous n'êtes pas correspondant à votre classe à vos données dans votre exemple.
Vous avez le code suivant:
point = (1, 2)
size = (2, 3)
color = 'red'
class Rect(object):
def __init__(self, x, y, width, height, color):
self.x = x
self.y = y
self.width = width
self.height = height
self.color = color
mais une meilleure façon d'exprimer vos Rect objet serait comme suit:
class Rect:
def __init__(self, point, size, color):
self.point = point
self.size = size
self.color = color
r = Rect(point, size, color)
En général, si vos données sont dans des tuples, demandez à votre constructeur de prendre des n-uplets. Si vos données sont dans un dict, demandez à votre constructeur de prendre un dict. Si vos données est un objet, demandez à votre constructeur de prendre un objet, etc.
En général, vous voulez travailler avec les idiomes de la langue, plutôt que d'essayer de travailler autour d'eux.
MODIFIER
En voyant à quel point cette question est, je vais vous donner un décorateur qui vous permet d'appeler le constructeur toutefois vous le souhaitez.
class Pack(object):
def __init__(self, *template):
self.template = template
def __call__(self, f):
def pack(*args):
args = list(args)
for i, tup in enumerate(self.template):
if type(tup) != tuple:
continue
for j, typ in enumerate(tup):
if type(args[i+j]) != typ:
break
else:
args[i:i+j+1] = [tuple(args[i:i+j+1])]
f(*args)
return pack
class Rect:
@Pack(object, (int, int), (int, int), str)
def __init__(self, point, size, color):
self.point = point
self.size = size
self.color = color
Maintenant, vous pouvez initialiser votre objet tout comme vous l'aimez.
r1 = Rect(point, size, color)
r2 = Rect((1,2), size, color)
r3 = Rect(1, 2, size, color)
r4 = Rect((1, 2), 2, 3, color)
r5 = Rect(1, 2, 2, 3, color)
Bien que je ne recommande pas l'utilisation de ce dans la pratique (il viole le principe que vous ne devez avoir qu'une seule façon de le faire), il ne servent à démontrer qu'il y a généralement un moyen de faire quelque chose en Python.