Inheritance and Inner/Nested Classes
Andrew Bennetts
andrew-pythonlist at puzzling.org
Mon Jul 12 10:58:15 EDT 2004
On Mon, Jul 12, 2004 at 10:28:08AM -0400, Paul Morrow wrote:
[...]
>
> ...would work, but I was hoping to avoid having to create the
> constructor methods as well as (re)declare the inner class in the
> descendent/child classes. It looks like class attributes take care of
> the former...
>
> #####################################
> class Parent(object):
> class Foo(object):
> baz = 'hello from Parent.Foo'
>
> class Child(Parent):
> class Foo(Parent.Foo):
> baz = 'hello from Child.Foo'
>
> x1 = Parent.Foo()
> x2 = Child.Foo()
> print x1.baz
> print x2.baz
> #####################################
>
> ... but I don't see any way to avoid the later.
>
> I know that this is still a contrived example, but just imagine that the
> Foo inner class represents some customization category, and baz is a
> customization variable in that category.
Well, the problem is that the way you say you want spell it is mutating a
shared object:
class Child(Parent):
Foo.baz = 'hello from Child.Foo'
If you want 'Foo' in Child to be a different object to the Foo in Parent,
then you need to somehow make it be a different object, which means
assigning to 'Foo' in Child's namespace. The simplest and clearest way to
do that is to explicitly subclass with "class Foo(Parent.Foo): ...".
-Andrew.
More information about the Python-list
mailing list