Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #19258

A way to write properties

Date 2012-01-23 11:45 +0000
Subject A way to write properties
From Arnaud Delobelle <arnodel@gmail.com>
Newsgroups comp.lang.python
Message-ID <mailman.4959.1327319113.27778.python-list@python.org> (permalink)

Show all headers | View raw


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

Back to comp.lang.python | Previous | NextNext in thread | Find similar | Unroll thread


Thread

A way to write properties Arnaud Delobelle <arnodel@gmail.com> - 2012-01-23 11:45 +0000
  Re: A way to write properties HEK <elkarouh@gmail.com> - 2012-01-24 01:51 -0800

csiph-web