Я хочу иметь возможность создать класс (в Python), который после инициализации __ init __
не принимает новые атрибуты, но принимает модификации существующих атрибутов. Есть несколько способов взлома, которые я вижу, чтобы сделать это, например, с помощью метода __setattr__
, такого как
def __setattr__(self, attribute, value):
if not attribute in self.__dict__:
print "Cannot set %s" % attribute
else:
self.__dict__[attribute] = value
, а затем редактирование __ dict __
непосредственно внутри __ init __
, но мне было интересно, есть ли «правильный» способ сделать это?
На самом деле вам не нужно __setattr__
, вам нужно __slots__
. Добавьте __slots__ = ('foo', 'bar', 'baz')
в тело класса, и Python позаботится о том, чтобы в любом экземпляре были только foo, bar и baz. Но прочитайте предостережения в списках документации!