Classes

Records contain a number of attributes.

An object contains attributes, and functions (called methods) to get or set these attributes.

UML Diagram for Example

Computer has a fixed ID and type. It has an operating system that can be updated.
Phone is a subclass type of computer, with an additional attribute and methods.

Computer        <-----   Phone
----------               ----------
- id : string;           - operator : string;
- type : string;         ----------
- os: string;            + getOperator()
----------               + changeOperator()
+ getID()
+ getType()
+ getOS()
+ updateOS()
#define a new class
class Computer():
    # constructor method with parameters
    def __init__(self, id, type, os):
        #assign parameter values to object attributes
        self.id = id
        self.type = type
        self.os = os
        
        #initial attributes can be manipulated
        self.id = self.id.upper()

        # some attributes have default values
        self.previousOS = []
        
    #str method provides formatted output for print commands
    def __str__(self):
        str  = f"ID: {self.id:15} "
        str += f"Type: {self.type:10} "
        str += f"OS: {self.os}"
        str += f"\nPrevious OS: {self.previousOS}"
        return str
    
    # methods to get values of attributes (getters)
    def getID(self):
        return self.id
    
    def getType(self):
        return self.type
    
    def getOS(self):
        return self.os
    
    def getPreviousOS(self):
        return self.previousOS
    
    # methods to update attributes (setters)
    def updateOS(self, newOS):
        self.previousOS.append(self.os)
        self.os = newOS
        
# MAIN PROGRAM   
# instantiation of an object of the class 
computer1 = Computer("AHS1913013","Desktop","Windows Vista")
print(computer1)

#use a setter method
computer1.updateOS("Windows 10 Professional")
print(computer1)

#use getter methods
id = computer1.getID()
type = computer1.getType()
print(f"Computer {id} is {type}")
ID: AHS1913013      Type: Desktop    OS: Windows Vista
Previous OS: []
 
ID: AHS1913013      Type: Desktop    OS: Windows 10 Professional
Previous OS: ['Windows Vista']
  
Computer AHS1913013 is Desktop
# new class Phone is a subclass of Computer
class Phone(Computer):
    # polymorphism 1
    def __init__(self, id, os, operator):
        # call superclass contructor
        super().__init__(id, "Phone", os)
        # add subclass specific attributes
        self.operator = operator
    
    # polymorphism 2
    # used instead of superclass' method
    def __str__(self):
        str  = f"ID: {self.id:15} "
        str += f"Type: {self.type:10} "
        str += f"OS: {self.os:10} "
        str += f"Operator: {self.operator}"
        str += f"\nPrevious OS: {self.previousOS}"
        return str
    
    def getOperator(self):
        return self.operator
    
    def changeOperator(self, newOperator):
        self.operator = newOperator

# MAIN PROGRAM
computer1 = Computer("AHS1913013","Desktop","Windows Vista")
print(computer1)
 
phone1 = Phone("XYZ1234567","Android 8","EE")
print(phone1)
ID: AHS1913013      Type: Desktop    OS: Windows Vista
Previous OS: []
 
ID: XYZ1234567      Type: Phone      OS: Android 8  Operator: EE
Previous OS: []