Skip to main content
Author:

Philipp von Weitershausen

License:

Zope Public License, v2.1

Motivation

Using method decorators and descriptors like property, we can easily create computed attributes:

>>> class JamesBrown(object):
...     @property
...     def feel(self):
...         return self._feel

An attribute like this cannot be written, though. You would have to do something like this:

>>> class JamesBrown(object):
...     def _getFeel(self):
...         return self._feel
...     def _setFeel(self, feel):
...         self._feel = feel
...     feel = property(_getFeel, _setFeel)

The problem with this approach is that it leaves the getter and setter sitting around in the class namespace. It also lacks the compact spelling of a decorator solution. To cope with that, some people like to write:

>>> class JamesBrown(object):
...     @apply
...     def feel():
...         def get(self):
...             return self._feel
...         def set(self, feel):
...             self._feel = feel
...         return property(get, set)

This spelling feels rather cumbersome, apart from the fact that apply is going to go away in Python 3000.

Goal

There should be a way to declare a read & write property and still use the compact and easy decorator spelling. The read & write properties should be as easy to use as the read-only property. We explicitly don’t want that immediately called function that really just helps us name the attribute and create a local scope for the getter and setter.

Class properties

Class properties let you define properties via the class statement. You define a dynamic property as if you were implementing a class. This works like this:

>>> from classproperty import classproperty
>>> class JamesBrown(object):
...     class feel(classproperty):
...         def __get__(self):
...             return self._feel
...         def __set__(self, feel):
...             self._feel = feel
>>> i = JamesBrown()
>>> i.feel
Traceback (most recent call last):
...
AttributeError: 'JamesBrown' object has no attribute '_feel'
>>> i.feel = "good"
>>> i.feel
'good'

Of course, deleters are also possible:

>>> class JamesBrown(object):
...     class feel(classproperty):
...         def __get__(self):
...             return self._feel
...         def __set__(self, feel):
...             self._feel = feel
...         def __delete__(self):
...             del self._feel
>>> i = JamesBrown()
>>> i.feel = "good"
>>> del i.feel
>>> i.feel
Traceback (most recent call last):
...
AttributeError: 'JamesBrown' object has no attribute '_feel'

Release files for classproperty 1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for classproperty 1.0
File Size Uploaded
classproperty-1.0.tar.gz 2.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for classproperty 1.0
File Interpreter ABI Platform
classproperty-1.0-py2.4.egg Legacy Egg format - - Details

Total release size: 5.1 kB

Release files / classproperty-1.0.tar.gz

Download URL classproperty-1.0.tar.gz
Size 2.3 kB
Tags Source
SHA-256 checksum
How to use checksums
c2caea61ed431ade216aed9f5253225a23b383252cc954fb254ea9487cea7056
BLAKE2b-256 checksum
How to use checksums
2601d0590085d6dcf0182a6ad43b89826726f5d01b6679745c468c78c6b74197
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / classproperty-1.0-py2.4.egg

Download URL classproperty-1.0-py2.4.egg
Size 2.8 kB
Tags Egg
SHA-256 checksum
How to use checksums
65d6faa6c6af6882c3f794ccef46f303ddcb22782a6a303c0ddda0cf2ca55e35
BLAKE2b-256 checksum
How to use checksums
39165766696472cab336f44ce826384e0a183e0018e0c37079b11a23df93cf04
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page