#WITH INIT FUNCTION
class Details:
def __init__(self,name,salary,role):
print (f"The name is {name} and the salary is {salary} and role is {role}")
Dev = Details("DEV ",999,"PROGRAMMER")
Akash = Details("AKASH", 1000, "READER")
#WITHOUT INIT FUNCTION
class Details:
def __init__(self,name,salary,role):
self.name=name
self.salary=salary
self.role=role
print (f"The name is {self.name} and the salary is {self.salary} and role is {self.role}")
Dev = Details("DEV MISHRA",999,"PROGRAMMER")
Akash = Details("AKASH PATHAK", 1000, "READER")
CodePudding user response:
self refers to the instance.
In the fist case, the attributes are not stored on the instance:
>>> Dev.name
AttributeError: 'Details' object has no attribute 'name'
In the second case, the attribute is stored on the instance.
>>> Dev.name
'DEV MISHRA'
This is important later if you want to access these attributes from instances or add additional methods to your class that need to know or modify these values.
class Details:
def __init__(self,name,salary,role):
self.name=name
self.salary=salary
self.role=role
def give_raise(self, raise_amount):
self.salary = raise_amount
Dev = Details("DEV MISHRA",999,"PROGRAMMER")
Dev.salary
999
Dev.give_raise(100)
Dev.salary
1099
CodePudding user response:
The self parameter is a reference to the current instance of the class, and is used to access variables that belongs to the class. The name self is a convention. You can use any other name but always it has to be the first. Thus, it doesn't matter if you finally use it, but if you don't put it and use other parameters, the first one will be considered as your self.
In your example, if you delete self on your first method:
class Details:
def __init__(name,salary,role):
print (f"The name is {name} and the salary is {salary} and role is {role}")
name will be the reference to the current instance of the class. Thus, if you call the method, you can only use salary and role parameters.
CodePudding user response:
If you write
class Details:
def __init__(self,name,salary,role):
print (f"The name is {name} and the salary is {salary} and role is {role}")
The variables name, salary and role exist only when the __init__() is being called, which is when you create the instance, aka. when you call Dev = Details(...).
That's because they are arguments of a function
After that is done, they no longer exist and you can't access them later.
Writing self.name = name will "store" the name argument into an attribute of the instance you just created, meaning that it will be saved after the __init__ function is done processing. And you can access that through Dev.name.
CodePudding user response:
Maybe you should read into what object-oriented-programming is to understand what member variables are: https://realpython.com/python3-object-oriented-programming/
