A way to write properties
Arnaud Delobelle
arnodel at gmail.com
Mon Jan 23 06:45:11 EST 2012
Hi all,
It just occurred to me that there's a very simple but slightly
different way to implement properties:
class PropertyType(type):
def __get__(self, obj, objtype):
return self if obj is None else self.get(obj)
def __set__(self, obj, val):
self.set(obj, val)
def __delete__(self, obj):
self.delete(obj)
class Property(metaclass=PropertyType):
pass
# Here is an example:
class Test:
class x(Property):
"My property"
def get(self):
return "Test.x"
def set(self, val):
print("Setting Test.x to", val)
# This gives:
>>> t = Test()
>>> t.x
'Test.x'
>>> t.x = 42
Setting Test.x to 42
>>> Test.x
<property 'x'>
>>> Test.x.__doc__
'My property'
It also allows defining properties outside class scopes:
class XPlus1(Property):
"My X Property + 1"
def get(self):
return self.x + 1
def set(self, val):
self.x = val - 1
class A:
def __init__(self):
self.x = 0
x_plus_one = XPlus1
class B:
def __init__(self):
self.x = 2
x_plus_one = XPlus1
>>> a = A()
>>> b = B()
>>> a.x
0
>>> a.x_plus_one
1
>>> b.x_plus_one
3
I don't know why one would want to do this though :)
--
Arnaud
More information about the Python-list
mailing list