Имея фон в Java, который является очень многословным и строгим, я нахожу возможность мутировать объекты Python, чтобы давать им поля, отличные от представленных конструктору, действительно "некрасиво".
Пытаясь приучить себя к питонскому образу мышления, Мне интересно, как я должен позволять строить свои объекты .
Мой инстинкт должен передавать поля во время строительства , например:
def __init__(self, foo, bar, baz=None):
self.foo = foo
self.bar = bar
self.baz = baz
Но это может стать чрезмерно многословным и запутанным со многими пропущенными полями. Чтобы преодолеть это, я предполагаю, что лучший способ - передать один словарь в конструктор, из которого извлекаются поля :
def __init__(self, field_map):
self.foo = field_map["foo"]
self.bar = field_map["bar"]
self.baz = field_map["baz"] if baz in field_map else None
Другой механизм, который я могу придумать, состоит в том, чтобы иметь поля, добавленные в другом месте , например:
class Blah(object):
def __init__(self):
pass
...
blah = Blah()
blah.foo = var1
Но так как это way слишком свободно для меня.
(Полагаю, проблема в моей голове заключается в том, как я справляюсь с интерфейсами в Python ...)
Итак, еще раз повторю вопрос: как мне конструировать свои объекты в Python? Есть ли принятая конвенция?