Запретить создание новых атрибутов вне __init __

Я хочу иметь возможность создать класс (в 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 __ , но мне было интересно, есть ли «правильный» способ сделать это?

66
задан DhiaTN 8 January 2018 в 09:50
поделиться

1 ответ

На самом деле вам не нужно __setattr__, вам нужно __slots__. Добавьте __slots__ = ('foo', 'bar', 'baz') в тело класса, и Python позаботится о том, чтобы в любом экземпляре были только foo, bar и baz. Но прочитайте предостережения в списках документации!

18
ответ дан 24 November 2019 в 14:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: