I am very new to coding. I want to understand when to use 'self'. Should I always use self when defining a method and call a method?
In the code below, #1 to #5, please help to explan what is wrong and why?
class customer() :
    def __init__(self, name, age, cellNumber): 
        self.name = name
        self.age = age
        self.cellNumber = cellNumber
    def sayHi():   #1
        print("Hi hi!!")
    def info(): #2
        print(self.name + " is "+ str(self.age) + "Number is "+ self.cellNumber)
customer.sayHi() #3
print(brian.age, rex.cellNumber)
print(rex.age)
customer.info(rex)** #4
rex.info()** #5