Bases: abc.ABC
, Generic[_T]
Base class for property descriptors used in FLObject
subclasses.
https://stackoverflow.com/a/69599069
Source code in pyflp/_properties.py
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 | class _Property(abc.ABC, Generic[_T]):
"""Base class for property descriptors used in `FLObject` subclasses.
https://stackoverflow.com/a/69599069"""
def __init__(self, validator: "_ValidatorType") -> None:
self.__validator = validator
def __repr__(self) -> str:
return (
f"<{type(self).__name__} "
f'name="{self.__public_name}", '
f'validator="{repr(self.__validator)}">'
)
def __set_name__(self, _, name: str) -> None:
self.__public_name = name
self.__private_name = "_" + name
def __get__(self, obj: "_FLObjectType", _=None) -> Optional[_T]:
if obj is None:
return self
return getattr(obj, self.__private_name, None)
def __delete__(self, obj) -> NoReturn:
raise OperationNotPermittedError("Properties cannot be deleted", obj)
def __set__(self, obj: "_FLObjectType", value) -> None:
self.__validator.validate(value)
setattr(obj, self.__private_name, value)
# This allows for overriding setter logic in _FLObject
# subclass while still allowing to use these descriptors
obj._setprop(self.__public_name, value)
|
__validator = validator
instance-attribute
__delete__(obj)
Source code in pyflp/_properties.py
| def __delete__(self, obj) -> NoReturn:
raise OperationNotPermittedError("Properties cannot be deleted", obj)
|
__get__(obj, _=None)
Source code in pyflp/_properties.py
| def __get__(self, obj: "_FLObjectType", _=None) -> Optional[_T]:
if obj is None:
return self
return getattr(obj, self.__private_name, None)
|
__init__(validator)
Source code in pyflp/_properties.py
| def __init__(self, validator: "_ValidatorType") -> None:
self.__validator = validator
|
__repr__()
Source code in pyflp/_properties.py
| def __repr__(self) -> str:
return (
f"<{type(self).__name__} "
f'name="{self.__public_name}", '
f'validator="{repr(self.__validator)}">'
)
|
__set__(obj, value)
Source code in pyflp/_properties.py
| def __set__(self, obj: "_FLObjectType", value) -> None:
self.__validator.validate(value)
setattr(obj, self.__private_name, value)
# This allows for overriding setter logic in _FLObject
# subclass while still allowing to use these descriptors
obj._setprop(self.__public_name, value)
|
__set_name__(_, name)
Source code in pyflp/_properties.py
| def __set_name__(self, _, name: str) -> None:
self.__public_name = name
self.__private_name = "_" + name
|