NameError: name 'mobile' is not defined

Viewed 26
class mobile:
    def __init__(self,brandname,color,isjack):

        self.brand=brandname
        self.color=color
        self.isjack=isjack

    def calling(self):
        print('calling')

    def cameraclick(self):
        print('picture is clicked')

    def message(self):
        print('message_sent')

    def main():

        m1=mobile('apple','black',False)
        print(m1.brand)
        print(m1.color)
        print(m1.isjack)
        m1.calling()
        m1.cameraclick()
        m1.message()   

        print("-------------------")

        m2=mobile('samsung','grey',False)
        print(m2.brand)
        print(m2.color)    
        print(m2.isjack)
        
    if __name__=='__main__':
        main()

I wrote a basic code to check why was i getting the name error. if anyone could help?

2 Answers

Check your indentation. As it is right now, your main function is a (static) method of your mobile class. This means that method and everything inside it gets read before the class definition for mobile is complete. Thus, the interpreter does not "know" mobile yet.

You should also reduce the indentation for this:

if __name__ == '__main__':
    main()

how are u doing?

This is happening bcs of indentation mistakes on the code!

Python uses indentation to indicate a block of code.

if main lives inside class mobile block it will only be callable if u prepend it with the mobile keyword when calling it

So u need to unindent the def main(): and if __name__ == '__main__': method and to the root level.

class Mobile:
    def __init__(self, brandname, color,isjack):
        self.brand=brandname
        self.color=color
        self.isjack=isjack

    def calling(self):
        print('calling')

    def cameraclick(self):
        print('picture is clicked')

    def message(self):
        print('message_sent')

def main():
    m1 = Mobile("apple", "black", False)
    print(m1.brand)
    print(m1.color)
    print(m1.isjack)
    m1.calling()
    m1.cameraclick()
    m1.message()

    print("-------------------")

    m2 = Mobile("samsung", "grey", False)
    print(m2.brand)
    print(m2.color)
    print(m2.isjack)

if __name__=='__main__':
    main()

tip:

  • ur class should ne named under the PascalCase rules
Related