Конструкция *args
действует в функции как заполнитель для остальных переданных аргументов, поэтому у вас не может быть двух «заполнителей для остальных аргументов», потому что технически существует только один «оставшиеся аргументы» . Пример:
def f(a, b, *args):
print(f'a = {a}, b = {b}, rest = {args}')
f(1, 2, 3, 4, 5, 6) # => a = 1, b = 2, rest = (3, 4, 5, 6)
**kwargs
аналогичен по духу, но применяется к аргументам, переданным способом keyword=value
: остальные переданные ключевые аргументы будут отображается внутри функции в виде dict
имени kwargs
. Пример:
def f(a, b, c, *args, **kwargs):
print(f'a = {a}, b = {b}, rest = {args}, rest-kw = {kwargs}')
f(1, 2, 3, 4, 5, 6, d=7, e=8) #=> a = 1, b = 2, rest = (3, 4, 5, 6), rest-kw = {'d': 7, 'e': 8}
С тем, что вы хотите сделать, технически не существует «отдыха», который вы хотите express, поэтому вы можете go с:
class Person2():
def __init__(self, name, age, petdogs, petcats):
self.name = name
self.age = age
self.petdogs = list(petdogs)
self.petcats = list(petcats)
def show_dogs(self):
for petdog in self.petdogs:
print(petdog)
def show_cats(self):
for petcat in self.petcats:
print(petcats)
и
Dummy2 = Person2(name = "Dummy", age = 16, petdogs = ("A", "B", "C"), petcats = ("D", "E"))
print("pet dogs:")
Dummy2.show_dogs()
print("pet cats:")
Dummy2.show_cats()
будут работать нормально.