Possible PEP: Improve classmethod/staticmethod syntax

Jeff Epler jepler at unpythonic.net
Wed Jun 4 16:22:57 EDT 2003


On Wed, Jun 04, 2003 at 12:31:12PM -0600, Steven Taschuk wrote:
> If we do want a tidier syntax for properties,
> 
>     class myclass(object):
>         property foo:
>             """docstring"""
>             def get(self):
>                 # ...
>             def set(self, value):
>                 # ...
>             def delete(self):
>                 # ...

Can't you write this as
    class C(object):
        class foo(Property):
            """Return the answer to the ultimate question of life, the universe, and everything"""
            def get(self): return 42
given the proper definition of Property? (the trick is that the metaclass
returns a 'property' object instead of a 'Property' subclass, except
when constructing the Property class itself)

class PropertyMeta(type):
    def __new__(typ, name, bases, ns):
        if name != "Property":
            return property(
                ns.get("get", None),
                ns.get("set", None),
                ns.get("del", None),
                ns.get("__doc__", None))
        return super(typ, PropertyMeta).__new__(typ, name, bases, ns)

class Property(object):
    __metaclass__ = PropertyMeta





More information about the Python-list mailing list