Есть только одна небольшая проблема Предположим, есть иерархия - Наследник-Предок, оба класса реализуют/используют динамические свойства.
В этом случае, если написать в произвольном коде ОбъектНаследника.ДобавитьДинамическоеСвойство(Имя);
Сам().ДобавитьДинамическоеСвойство(Имя);
или
ОбъектБаза = ОбъектНаследника.ПолучитьБазовыйКласс("Предок");
ОбъектБаза.ДобавитьДинамическоеСвойство(Имя);
или в коде класса Наследник Сам().ДобавитьДинамическоеСвойство(Имя);
или
ОбъектБаза = Сам().ПолучитьБазовыйКласс("Предок");
ОбъектБаза.ДобавитьДинамическоеСвойство(Имя);
на самом деле
динамическое свойство будет добавлено только к объекту класса Наследник, а не к базовому классу, и обработка добавленного имени будет происходить в классе-наследнике, а не в базовом классе.
Связано это с "питоновой" реализацией ООП в С++
Но, если для такой иерархии в коде класса Предок (внутри класса, а не снаружи) написано Сам().ДобавитьДинамическоеСвойство(Имя);
динамическое свойство будет добавлено именно к объекту базового класса, и обработка добавленного имени будет происходить в базовом классе, а не в его потомке.
Считаю это правильным, т.к. ИМХО динамические свойства в подавляющем большинстве случаев должен добавлять сам класс внутри своего кода, а не его клиенты.
Вышеописанная проблема актуальна только для иерархий, в которых и предок, и потомок реализуют динамические свойства. Для всех остальных вариантов нет разницы, из какого кода вызывается метод ДобавитьДинамическоеСвойство.