def __str__(self):
return "({})".format(",".join(args))
В этом месте у вас уже нету args. Зато вы можете уже обращаться к полям объекта. Но нужно ли делать много полей? Может использовать одно поле, которое бы хранило входные аргументы?
class Vector:
def __init__(self, *args):
self.point = []
for arg in args:
self.point.append(arg)
def __str__(self):
return "({})".format(",".join(map(str, self.point)))
a = Vector(1, 2, 3, 4)
print a
b = Vector(10, 20, 30, 40)
print b
В данном примере входные аргументы сохраняются в списке self.point, откуда их легко извлечь.
Также в ",".join добавлено приведение всех объектов self.point к строке, чтобы можно было их объединять.