Python Classes and Objects

In Python, classes are used to bring related data and functions together. To create a class, use class keyword.

In the following code, you can find a simple Employee1 class. This class has one variable, name. Variables defined in classes are called attributes.

After Employee1 class definition, an instance of Employee1 class is created and given name employee1.

# Class Definition
class Employee1:
    """ A simple Employee class """
    name = "George"

# Test Code
employee1 = Employee1();      # an Employee instance is created 
print(employee1.name)         # George

The __init__() Method (Class Constructor)

Employee1 class had one attribute called name. Every instance created from Employee1 class access the same value for name attribute: George.

# Class Definition
class Employee1:
    """ A simple Employee class """
    name = "George"

# Test Code
employee1 = Employee1();
employee2 = Employee1();
print(employee1.name)         # George
print(employee2.name)         # George

Usually, classes are used, so that each instance has its own data. To assign values to attributes of an instance separately, you can use a Constructor (__init__() Method). In the sample code below: employeeGeorge instance has the name “George”; employeeJohn instance has the name “John”.

# Class Definition
class Employee2:
    """ An Employee class with a Constructor """
    number_of_employees = 0                      # Class Attribute

    def __init__(self, name):                    # Constructor Method
        """ Constructor for Employee2 class """
        self.name = name                         # Instance Attribute
        Employee2.number_of_employees += 1

# Test Code
employeeGeorge = Employee2("George");
employeeJohn   = Employee2("John");

print(employeeGeorge.name)                   # George
print(employeeJohn.name)                     # John

print(employeeGeorge.number_of_employees)    # 2
print(employeeJohn.number_of_employees)      # 2

When an attribute is defined outside the __init__() method in a class, this attribute is called a Class Attribute. All instances share common data for class attributes. In the example, number_of_employees is a class attribute. It has the same value (2) for both instances (employeeGeorge, employeeJohn).

When an attribute is defined inside __init__() method, this attribute is an Instance Attribute. Every object has its own copy of the instance attribute. In the example, name is an instance attribute. The instance employeeGeorge has its own name “George”, the instance employeeJohn has its distinct name “John”.

Instance Methods

Similar to Instance Attributes, Python classes can also have Instance Methods.

You can access attributes of an instance using self keyword inside methods. The keyword self refers to the current instance. For example, self.name is “George” for employeeGeorge instance, self.name is “Paul” for employeePaul instance.

Instance methods should have self as the first method argument.

# Class Definition
class Employee3:
    """ An Employee class with Constructor and an Instance Method """

    def __init__(self, name, employeeId):
        """ Constructor for Employee3 class """
        self.name = name
        self.employeeId = employeeId

    def print_employee_info(self):
        print("Employee Name is: " + self.name)
        print("Employee Id is: " + str(self.employeeId))

# Test Code
employeePaul = Employee3("Paul", 54112)
employeePaul.print_employee_info()   # prints following lines:
                                     # Employee Name is: Paul
                                     # Employee Id is: 54112