Inheriting property functions

Aahz aahz at pythoncraft.com
Fri Oct 20 22:54:33 EDT 2006


In article <1161383286.543397.46700 at m73g2000cwd.googlegroups.com>,
Dustan <DustanGroups at gmail.com> wrote:
>
>>>> class A(object):
>	def __init__(self, a):
>		self.a = a
>	def get_a(self): return self.__a
>	def set_a(self, new_a): self.__a = new_a
>	a = property(get_a, set_a)
>
>
>>>> class B(A):
>	b = property(get_a, set_a)

BTW, since you're almost certainly going to run into this quickly given
the direction your code is taking (and also to fix some bugs):

class A(object):
    def __init__(self, a):
        self._a = a

    def get_a(self):
        return self._a

    def _get_a(self):
        return self.get_a()

    def set_a(self, new_a):
        self._a = new_a

    def _set_a(self, new_a):
        self.set_a(new_a)

    a = property(_get_a, _set_a)

class B(A):
    def get_a(self):
        return str(self._a)

Thank Alex Martelli for this demonstration that programming is all built
on one basic trick: add another layer of indirection.  However, I leave
you to figure out on your own why this is better.

Note carefully that I changed __a to _a.  You almost never want to use
double-underscore private names because of the way they cause problems
with inheritance.

PS: Please do NOT post code with TABs
-- 
Aahz (aahz at pythoncraft.com)           <*>         http://www.pythoncraft.com/

"If you don't know what your program is supposed to do, you'd better not
start writing it."  --Dijkstra



More information about the Python-list mailing list