Correct Attribute Assignment Methodology?

Terry Reedy tjreedy at udel.edu
Wed Jul 30 12:22:56 EDT 2008



Tim Cook wrote:
> Say I have these classes:
> 
> class Parent(object):
>   """Parent is abstract"""
>   a=None
>   def showA():
>    return self.a
> 
> class Child(Parent):
>   """inherits a and showA from Parent"""
> 
>   def __init__(self,a,b):
>     self.a=a   
>     self.b=b
> 
>   def showAB():
>    return self.a,self.b
> 
> 
> class GrandChild(Child):
>   """inherits all of the above"""
> 
>   def __init__(self,a,b,c):
>    self.a=a
>    self.b=b  
>    """should this be Child.__init__(a,b)? or Child.__init__(b)?""  

Child.__init__(self,a,b) # requires all three params.

>    """if so; why? if not why not?"""

In this simple case, I would probably do what you did.  But a reason to 
call the baseclass init would be to not repeat yourself and keep the 
derived class in sync.  Suppose, for instance, Child.__init__ had 
'self.frob = math.sin(a) + math.cos(b) - math.sqrt(a*a+b*b)', and then 
you realize that the formula needs to be changed.  Better to have it in 
one place.

>    self.c=c
> 
> Thanks for answering these very basic questions but I am not certain
> about the correct way.  I know that in Python, assignment in the
> GrandChild class will work but is that correct?




More information about the Python-list mailing list