Inheriting property functions

Dustan DustanGroups at gmail.com
Sat Oct 21 02:36:47 CEST 2006


Robert Kern wrote:
> Dustan wrote:
> > Looking at this interactive session:
> >
> >>>> 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)
> >
> >
> > Traceback (most recent call last):
> >   File "<pyshell#11>", line 1, in <module>
> >     class B(A):
> >   File "<pyshell#11>", line 2, in B
> >     b = property(get_a, set_a)
> > NameError: name 'get_a' is not defined
> >>>> class B(A):
> > 	b = a
> >
> >
> > Traceback (most recent call last):
> >   File "<pyshell#13>", line 1, in <module>
> >     class B(A):
> >   File "<pyshell#13>", line 2, in B
> >     b = a
> > NameError: name 'a' is not defined
> >
> > B isn't recognizing its inheritence of A's methods get_a and set_a
> > during creation.
>
> Inheritance really doesn't work that way. The code in the class suite gets
> executed in its own namespace that doesn't know anything about inheritance. The
> inheritance rules operate in attribute access on the class object later.
>
> Try this:
>
>    class B(A):
>      b = property(A.get_a, A.set_a)
>
> or this:
>
>    class B(A):
>      b = A.a
>
> --
> Robert Kern
>
> "I have come to believe that the whole world is an enigma, a harmless enigma
>   that is made terrible by our own mad attempt to interpret it as though it had
>   an underlying truth."
>    -- Umberto Eco

Thanks for your help, and mdsteele's.




More information about the Python-list mailing list