Свойства это способ декларации полей класса, который может быть использован для реализации таких особенностей, как поля только для чтения / только для записи ( read-only / write-only ) или поля, доступ к которым осуществляется только через методы getter или setter.
Вот пример объявления свойства :
Значение getter и setter может быть одним из следующих :
* имя метода, который будет использован, как getter/setter
* null если доступ запрещён
* default доступ осуществляется обычным обращением к полю
* dynamic если доступ осуществляется через метод, сгенерированный во время выполнения
===== Пример =====
Вот полный пример :
Используя декларацию свойств, мы объявили три публичных поля в классе C :
* вне класса, поле ro является полем только для чтения
* вне класса, поле wo является полем только для записи
* доступ к полю x осуществляется через пару методов - getX и setX
Например, следующие две функции эквивалентны, хотя методы getX и setX являются приватными и поэтому к ним нельзя обращаться напрямую, как в f2 :
===== Важное замечание =====
Важно знать, что эти возможности работают только если тип класса уже известен. Обработки свойств во время выполнения нет, так что например, следующий код будет всегда выводить null т.к. метод getX никогда не будет вызван :
То же происходит и со свойствами только для записи или для чтения. Они всегда могут быть изменены в объекте если тип его класса ещё неизвестен.
===== Динамические свойства =====
Динамический доступ может быть использован для добавления методов во время выполнения. Это довольно специфичная возможность, так что лучше использовать её осторожно. Когда к динамическому полю осуществляется доступ для чтения вызывается метод get_x, для записи - метод set_x :