Accessing class attribute

Peter Otten __peter__ at web.de
Thu Sep 12 02:45:21 EDT 2013


chandan kumar wrote:

> Hi ,
> 
> I'm new to python ,please correct me if there is any thing wrong with the
> way accessing class attributes.
> 
> Please see the below code .I have inherited confid in ExpectId class,
> changed self.print_msg  to Hello. Now  inherited confid in TestprintmsgID
> class.Now  I wanted to print self.print_msg value (which is changed under
> ExpectId class)  as Hello under TestprintmsgID. I end up with error saying
> TestprintmsgID has no attribute self.print_msg.  Atleast i expect the null
> to be printed.
> 
> 
> 
> class confid():
>     def __init__(self):
>         self.print_msg = ""
> 
> class ExpectId(confid):
> 
>     def __init__(self):
>         self.print_msg = " Hello"
> 
>     def expectmethod(self):
>         print "self.print_mesg = ",self.print_msg
> 
> class TestprintmsgID(confid):
>  
>     def __init__(self):
>         "Created  Instance"
> 
>     def printmsgmethod(self):
>         print "printmsgmethod print_msg val = ",self.print_msg---- Here is
>         the  Attribute error

If the class has an __init__() method the initializer of the base class is 
not invoked automatically. 

In the above code the initializer of TestprintmsgId does nothing, so you can 
avoid it. ExpectId.__init__() however must invoke confid.__init_(). 

The complete example:

class confid():
    def __init__(self):
        self.print_msg = ""

class ExpectId(confid):    

    def __init__(self):
        confid.__init__(self)
        self.print_msg = " Hello"

    def expectmethod(self):
        print "self.print_mesg = ",self.print_msg

class TestprintmsgID(confid):   
 
    def printmsgmethod(self):
        print "printmsgmethod print_msg val = ",self.print_msg


Note that there is an alternative way to invoke a baseclass method using 
super() which works only for "newstyle classes", i. e. classes that inherit 
from object:

class confid(object):
    def __init__(self):
        self.print_msg = ""

class ExpectId(confid):    

    def __init__(self):
        super(ExpectId, self).__init__()
        self.print_msg = " Hello"

    def expectmethod(self):
        print "self.print_mesg = ",self.print_msg

class TestprintmsgID(confid):   
 
    def printmsgmethod(self):
        print "printmsgmethod print_msg val = ",self.print_msg






More information about the Python-list mailing list