Knacktus wrote:
Hi guys,

I've got the following (not working) code:
[...]
The problem is that the descriptors are created when the module is
evaluated. But at this time the class BaseItem is not known yet. Any ideas?

Yes -- don't do that.

What are you actually trying to accomplish? Embedding an instance of the class in the class is a means to an end, not the end itself. What problem are you trying to solve? There may be a better way.

My *guess* is that you're trying to create properties that automatically check their type. As much as I think that's probably a bad idea, this is how I would solve that:


import functools

class CheckedProperty(property):
    def __init__(self, type, fget=None, fset=None, fdel=None, doc=None):
        if fset is not None:
            fset = self.checked(type, fset)
        super().__init__(fget, fset, fdel, doc)
    def checked(self, type, func):
        @functools.wraps(func)
        def inner(self, value):
            if not isinstance(value, type):
                raise TypeError('invalid type')
            return func(self, value)
        return inner

class Test(object):
    def _getx(self):
        return self.__x
    def _setx(self, value):
        self.__x = value
    x = CheckedProperty(str, _getx, _setx)



But please don't over-use isinstance checks. They're a bad idea.


--
Steven

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to