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: []
