A collection of property variants
Project description
more_properties
A collection of property
variants.
Basic Usage
Variants behave mostly as the built-in property
, except where noted.
Given the following class,
from more_properties import property, class_property, static_property
class Parrot:
@property
def name(self):
return "Fred"
@class_property
def order(cls):
return Psittaciformes
@static_property
def planet():
return Earth
the properties may be accessed like so:
>>> Parrot().name
'Fred'
>>> Parrot.order
<class 'Psittaciformes'>
>>> Parrot.planet
<class 'Earth'>
Setters/Deleters
Setters and deleters are defined in the same way as the built-in property
.
Either with the decorator method
from more_properties import class_property
class Foo:
name = "Foo"
@class_property
def identifier(cls):
"""Object identifier"""
return cls.name.lower()
@identifier.setter
def identifier(cls, value):
cls.name = value.title()
@identifier.deleter
def identifier(cls):
cls.name = None
or the inline method
from more_properties import class_property
class Foo:
name = "Foo"
@classmethod
def get_identifier(cls):
return cls.name.lower()
@classmethod
def set_identifier(cls, value):
cls.name = value.title()
@classmethod
def del_identifier(cls):
cls.name = None
identifier = class_property(
get_identifier,
set_identifier,
del_identifier,
"Object identifier"
)
Reference
property
A modified version of the built-in property
.
Always behaves as a data descriptor, regardless of which (if any) of getter, setter, and deleter are set.
Behaviour when accessed on a class, is undefined.
class_property
A property
for classes.
Both cls.x
and instance.x
call the getter with the class.
Setting instance.x
calls the setter with the class and value.
Deleting instance.x
call the deleter with the class only.
from more_properties import class_property
class Foo:
@class_property
def identifier(cls):
"""Class identifier"""
return cls.__name__.lower()
class Bar(Foo):
pass
>>> Foo.identifier
'foo'
>>> Foo().identifier
'foo'
>>> Bar.identifier
'bar'
>>> Bar().identifier
'bar'
classproperty
provided as a synonym, for consistency with classmethod
.
static_property
A property
independent of its accessor.
Both cls.x
and instance.x
call the getter with no parameters.
Setting instance.x
calls the setter with the value only.
Deleting instance.x
call the deleter with no parameters.
from more_properties import static_property
x = "bar"
class Foo:
@static_property
def val():
return x
>>> Foo.val
'bar'
>>> Foo().val
'bar'
staticproperty
provided as a synonym, for consistency with staticmethod
.
cached_property
cached_class_property
cached_static_property
Variants of property
, class_property
, and static_property
, respectively.
They are each used in the same way as the originals, but cache the value of the getters.
from dataclasses import dataclass
from more_properties import cached_property
@dataclass
class Foo:
x: int
@cached_property
def y(self):
print("Doing work")
return self.x + 1
>>> bar = Foo(1)
>>> bar.y
Doing work
2
>>> bar.y
2
If the setters/deleters are defined, then the cache is cleared before they are called.
Further, the cache may be explicitly cleared through the clear_cache
method,
exposed only during class creation.
@dataclass
class Foo:
x: int
@cached_property
def y(self):
print("Doing work")
return self.x + 1
y_clear_cache = y.clear_cache
>>> bar = Foo(1)
>>> bar.y
Doing work
2
>>> bar.y
2
>>> bar.y_clear_cache()
>>> bar.y
Doing work
2
Installation
Install and update using the standard Python package manager pip:
pip install more_properties
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file more_properties-1.1.1.tar.gz
.
File metadata
- Download URL: more_properties-1.1.1.tar.gz
- Upload date:
- Size: 5.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 47b136857d89c72b53def0fade2f2e0a23a95071c3eb87d5a77cfc91554f106c |
|
MD5 | 3dc1881b6fe446c993ddbba5aa7670de |
|
BLAKE2b-256 | 9279bf355e368c07fcf55a6a69e79af00addfa15e0e8a58eea14a39281e5721e |
File details
Details for the file more_properties-1.1.1-py3-none-any.whl
.
File metadata
- Download URL: more_properties-1.1.1-py3-none-any.whl
- Upload date:
- Size: 7.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0992c49041cb2600e5ff4d8414bdf5761551f5404d00a4e553ced4f14d34b0bb |
|
MD5 | c61ada8ea82ae810c3060b54358bb855 |
|
BLAKE2b-256 | 16b018f46d8917d2d7806df5c4f5c1f529fc7d3cf305106dddf304fe1fe48aa3 |