简体   繁体   中英

In Python OOP can you help me understand why does this code not work

when I run this code I get an error message "AttributeError: 'Acrobat' object has no attribute 'Stagename'" This is an exam question and the code has been provided as an example answer.
I am not sure why it does not work or where my error is?

    def __init__(self, Firstname, Lastname, Stagename, SecondaryRole, Type):
        self.__FirstName = Firstname
        self.__LastName = Lastname
        self.__StageName = Stagename
        self.__SecondaryRole = SecondaryRole
        self.__PerfType = Type

    def EditSecondaryRole(self, NewRole):
        self.SecondaryRole = NewRole
        
    def EditStageName(self, NewStageName):
        self.StageName = NewStageName


class Acrobat(Performer):
    def __init__(self,Firstname, Lastname, Stagename, SecondaryRole, Fire):
        Performer.__init__(self, Firstname, Lastname, Stagename, SecondaryRole, "Acrobat")
        self.__UseFire = Fire

    def PerformerInfo(self):
        ReturnString = "%s (real name %s %s) is %s. " % (self. Stagename, self.Firstname,self. Lastname, Acrobat.PerfType)
        if(self.__UseFire):
            ReturnString = ReturnString + "Fire is part of %s's act. " % (self.Stagename)
        else:
            ReturnString = ReturnString + "Fire is not part of %s's act. " %(self.Stagename)
        ReturnString = ReturnString + "When not performing, %s is a %s" % (self.Stagename, self.SecondaryRole)
        return ReturnString


Acrobat1 = Acrobat("Alex","Tan","Amazing Alex","Popcorn Seller",True)

print(Acrobat1.PerformerInfo()) 

Thanks for the help - this works but Im still not sure how to answer the question with private methods

    def __init__(self, Firstname, Lastname, Stagename, Secondaryrole, Type):
        self.Firstname = Firstname
        self.Lastname = Lastname
        self.Stagename = Stagename
        self.Secondaryrole = Secondaryrole
        self.PerfType = Type

    def EditSecondaryRole(self, NewRole):
        self.Secondaryrole = NewRole
        
    def EditStageName(self, NewStageName):
        self.Stagename = NewStageName


class Acrobat(Performer):
    def __init__(self,Firstname, Lastname, Stagename, Secondaryrole, Fire):
        Performer.__init__(self, Firstname, Lastname, Stagename, Secondaryrole, "Acrobat")
        self.__UseFire = Fire


    def PerformerInfo(self):
        ReturnString = "%s (real name %s %s) is %s. " % (self.Stagename, self.Firstname,self. Lastname, "Acrobat")
        if(self.__UseFire):
            ReturnString = ReturnString + "Fire is part of %s's act. " % (self.Stagename)
        else:
            ReturnString = ReturnString + "Fire is not part of %s's act. " %(self.Stagename)
        ReturnString = ReturnString + "When not performing, %s is a %s" % (self.Stagename, self.Secondaryrole)
        return ReturnString

Performer1 = Performer("Paul","Smith","Smithy","Greeter","Clown")
Acrobat1 = Acrobat("Alex","Tan","Amazing Alex","Popcorn Seller",False)

print(Acrobat1.PerformerInfo())

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM