GitHub - a2435191/python-attribute-access-modifiers: Add C#-like `{get; set;}` syntax to Python attributes.
Tired of typing @property just to make a read-only instance variable? Find yourself wishing for C#'s {get; set;} syntax? Look no further than PAAM, which auto-generates property getters, setter, and deleters for you!
Quickstart
Once installed, just use the overloaded | operator between an instance variable and one of the predefined constants GET, SET, or DEL. Make sure to subclass from PaamBase.
from paam import SET, PaamBase class Test(PaamBase): def __init__(self, a: int): self.a = a | GET # write to self.a (not self._a) because PAAM creates setters/getters/deleters *after* __init__ finishes >>> obj = Test(15) >>> obj.a >>> 15 >>> obj.a = 5 # raises AttributeError: can't set attribute
Property access modifiers can also be chained (order doesn't matter):
from paam import SET, GET, DEL, PaamBase class Test(PaamBase): def __init__(self, a: int): self.a = a | GET | SET >>> obj = Test(15) >>> obj.a >>> 15 >>> obj.a = 5 >>> obj.a >>> 5 >>> del obj.a # raises AttributeError: can't delete attribute
Caveats (all planned to be fixed in future release)
- The type of any variable "annotated" with
GET,SET, orDELis_PropertyAccessModifierBase. This meansmypysupport and IDE type hinting are most likely broken. - No tests
- Error messages currently only show owner class