jestem znalezieniem się pisać dużo zajęć z konstruktorów takich jak ten:Poprawa __init__ gdzie args są przypisane bezpośrednio do członków
class MyClass(object):
def __init__(self, foo, bar, foobar=1, anotherfoo=None):
self.foo = foo
self.bar = bar
self.foobar = foobar
self.anotherfoo = anotherfoo
Czy to zły zapachy kodu? Czy Python oferuje bardziej elegancki sposób obsługi tego?
Moje klasy, a nawet niektórzy konstruktorzy są czymś więcej niż tylko tym, co pokazałem, ale zwykle mam listę argumentów przekazywanych do konstruktora, który właśnie kończy się przypisywanie do podobnie nazwanych członków. Zrobiłem niektóre z argumentów opcjonalnych zwrócić uwagę na problem robi coś takiego:
class MyClass(object):
def __init__(self, arg_dict):
self.__dict__ = arg_dict
O ile nie przewidujesz, że lista argumentów będzie rosła dużo dłużej lub będziesz potrzebować arbitralnego zestawu argumentów zawsze konwertowanych na atrybuty (w takim przypadku wymuszam użycie kwargs), nie widzę w tym nic złego. W większości przypadków robię to samo, dobrze się czyta i jest to zamierzony prerogatyw __init__. Nie sądzę, żeby w ogóle pachniał. –
Zobacz także http://stackoverflow.com/questions/3652851. – FMc