Одним словом: гибкость.Я использовал динамические свойства при необходимости передавать данные с объектами GUI в метод, который обрабатывает событие, присоединенное к ним, в качестве одного примера.Я уверен, что существуют десятки других применений.
Тем не менее, если вы относитесь к тому типу людей, которым нравится иметь принудительные атрибуты и не разрешать динамически добавлять новые, вы можете сделать это.Я могу представить несколько мест, где это полезно, например, помогает убедиться, что вы не устанавливаете неправильное значение (опечатку) в своем коде.Что-то вроде самопроверки.
Чтобы ограничить / предотвратить добавление динамических значений, вы можете добавить свойство __slots__
в класс, как показано ниже.
class Foo(object):
__slots__ = ['val', 'val2']
pass
foo = Foo()
foo.val = 10
print(foo.val)
foo.b = 5 # throws exception
print(foo.b)