Accessing parent objects

Terry Reedy tjreedy at udel.edu
Sun Mar 25 10:25:45 EDT 2018


On 3/25/2018 7:42 AM, Jugurtha Hadjar wrote:

> class C2(object):
>      def __init__(self, parent=None):
>          self.parent = parent

Since parent is required, it should not be optional.

>      def foo(self):
>          print("I am {self.__class__.__name__} foo".format(self=self))
>          self.parent.foo()

None.foo will raise AttributeError.

> class C1(object):
>      def __init__(self, child_class=None):
>          self.child = child_class(parent=self)

Ditto.  None() will raise TypeError

If your intent is to force passing parent/child_class by name rather 
than by position, use *, as in
     def __init__(self, *, child_class):


>      def foo(self):
>          print("I am {self.__class__.__name__} foo".format(self=self))
> 
> c1 = C1(child_class=C2)
> c1.child.foo()  # I am C2 foo
>                  # I am C1 foo


-- 
Terry Jan Reedy





More information about the Python-list mailing list