Guide to High School Computer Science
  • 💻Introduction
    • windows & Python Development
    • macOS & Python Development
    • Visual Studio Code Settings
    • Set up Github
    • Author Page
  • 🧠Prerequisite Skills
    • Keyboard Typing
    • Files & Directories
    • Use of Command Line
    • Git & GitHub
    • Markdown
    • Starting Your Python Project
  • 🐍Python Programming
    • 🍎Python Basics
      • What is Python?
      • Procedural Programming & Programming Paradigms
      • String Formatting
      • Data Types
      • Input & Output to Console
      • Working with Numbers
      • Useful Built-in Functions
      • Math & Random Module
      • Boolean Data Object
      • Comparison, Logical, and Membership Operators
      • If Statements
      • Binary Decisions
      • Multiple Decisions
      • Nested Conditions
      • [EXTRA] Bitwise Operators
      • [EXTRA] Python Style Guide
    • ⏮️Iterations
      • Introduction to While Loops
      • Infinite Loop
      • Controlling Your While Loops
      • Introduction to For Loops
      • For Loops w/ Numeric Sequences
      • For Loops w/ Strings & Lists
      • Iterable Functions w/ For Loops
    • 📦Collections
      • Strings
        • String Basics
        • String Indexing
        • String Slicing
        • String Operators & Functions
        • Basic String Methods
        • String Methods Extended
        • String Methods Document
      • Tuples & Lists
        • Tuples
        • List Basics
        • List are Mutable
        • Adding Items to a List
        • Removing Items from a List
        • Search & Reverse a List
        • List Comprehension
        • List Methods Document
      • Sets
      • Dictionary
      • How to Store Multiple Data Items
    • 💡Defining Functions
      • Functions
      • print() vs return
      • Pre-determined Arguments
      • Nested Functions
      • Map & Filter
      • [Extra] Dynamic Arguments
    • 💾File I/O
      • How to Save Text to an External File
      • Reading CSV in Python
      • Reading JSON in Python
    • 🔨Basic Python Projects
      • Basic Calculator
        • Improving the calculator
        • Exercise Set 1
        • Exercise Set 2
        • 💎Streamlit Application #1
      • Basic Password Generator
        • Exercise Set 3
        • Exercises Related to Math
        • 💎Streamlit Application #2
      • A To-Do Task List
    • ⏳Introduction to Algorithmic Thinking
      • Big-O Notation
      • Basic Algorithms
        • Linear Search
        • Binary Search
        • Basic Sorting Algorithms
      • Recursion
      • Brute Force Algorithms
      • Greedy Algorithm
        • Time on Task (CCC 2013 J4)
        • Dijkstra’s Algorithm
      • Divide and Conquer
        • Merge Sort
      • Dynamic Programming
    • 🤯Object Oriented Programming
      • Class & Objects (Definitions)
      • OOP in Python
      • Encapsulation
      • Polymorphism
      • Inheritance & Overriding
      • Override Magic Methods
      • Case Study: 2D Vectors
      • Case Study: Deck of Cards
      • Exercise
      • Abstract Data Types
      • Case Study: Static 1D Array From Java
    • Competitive Programming
      • Is This Sum Possible?
        • Is the dataset sorted?
        • Searching for a value
        • Determine if the difference between an integer from the array and the target value exists
        • Sorting Algorithms
        • Using Two Pointers
      • Two Sum - LeetCode
        • Generate all possible pairs of values
        • Subtract each value from the target, see if the difference exists in the list
      • Longest Common Prefix - LeetCode
        • Compare all possible prefixes
        • Create the longest common prefix with the direct neighbour
      • Length of Last Word - LeetCode
        • Compare all possible prefixes
      • Where can I go from one point to another?
      • Sample Outline
    • IB Recipe Book
  • 💾Python & Databases
    • Intro to Databases & Data Modeling
      • Common Data Types in SQL
      • Introduction to ERDs
      • Primary Keys and Foreign Keys
      • Database Normalization
    • What is SQL?
      • Getting Started
      • SELECT Queries
        • Selection with Conditions
        • Selection with Fuzziness
        • Selection and Sorting in Order
        • Selection without Duplicates
        • Selection with Limited Number of Outputs
      • AGGREGATE Queries
        • Counting Rows
        • Sum, Average, Min/Max Queries
        • Working with Aggregate Queries
        • Power of using Groups
        • Exercise
      • Interacting with Multiple Table
      • Inserting Data
      • External Resource
  • ☕Java Essentials
    • Basics
      • Starting Java
      • Data & Variables
      • Handling User Inputs & Type Conversion
      • Arithmetic
      • IPO Model
      • Basic Built-in Methods
      • Exercise Questions
    • Conditionals
      • Boolean Operators
      • Compare Strings
      • If Statements
      • If Else Statements
      • Making Multiple Decisions
      • Using Switch
      • Flowchart Symbols
      • Exercise Questions
    • Iterations
      • While Loops
      • For Loop
      • Exercises
    • Java Type Casting
    • Strings
      • Common String Practices
      • String Formatting
      • Java Special Characters
    • Collection
      • Arrays
      • For Each Loop
      • ArrayList
      • Exercise Questions
    • Static Methods
      • (Aside) Clearing your Console
    • Randomness in Java
    • Delayed Output in Java
    • Java Output Formatting
    • Java Style Guide
  • 🛠️JavaScript Programming
    • Our Programming Editor & Workflow
      • Hello, world!
      • Commenting & Variables
      • Data in JavaScript
      • Operators
      • String Formatting
      • Getting User Input
    • JavaScript Exercise Set 1
    • Making Decisions
      • Comparing Values
      • Combining Boolean Comparisons
      • Creating Branches
    • JavaScript Exercise Set 2
    • While Loops
      • Infinite While Loop
      • While Loops and Numbers
      • While Loops and Flags
      • While loops w/ Strings
    • JavaScript Exercise Set 3
    • Subprograms & Functions
      • Creating a Function in JavaScript
      • Function with Input and Assignable Output
    • JavaScript Exercise Set 4
  • 💾Topics in CS
    • Computer Environments & Systems
      • Computer Components
        • In-depth Explanations
      • File Maintenance
      • Computer & Safety
      • Software Development
      • Bits & Binary
    • Careers related to Computer Science
    • Postsecondary Opportunities
Powered by GitBook
On this page
  • Making Objects Printable
  • Fixing the Employee classes
  • Other Base Functions to Override.
  • Addition, Subtraction, Multiplication, Division
  • Make our objects comparable
  1. Python Programming
  2. Object Oriented Programming

Override Magic Methods

PreviousInheritance & OverridingNextCase Study: 2D Vectors

Last updated 5 months ago

Making Objects Printable

class Employee: 
    def __init__(self, name, age, eid): 
        self.name = name 
        self.age = age
        self.eid = eid 

employeeObject = Employee('employeeName', 20, 1101)

print(employeeObject)

Outputs

<__main__.Employee object at 0x000001DBB695FB50>

This occurs because we did not code a behaviour for our objects when they are used in String Scenarios. We must override two functions: and .

To make an object printable.

We must override two built-in base functions in Python:

  1. __str__()

  2. __repr__()

The __str__() method returns a human-readable, or informal, string representation of an object. Often called when the object is within a print() or str()

The __repr__() method returns a more information-rich, or official, string representation of an object. This is often called when your custom object needs to be displayed within another or any other sitution where __str__() is not used.

Fixing the Employee classes

class Employee: 
    def __init__(self, name, age, eid): 
        self.name = name 
        self.age = age
        self.eid = eid 
    
    def __str__(self):
        return f"{self.eid}: {self.name}"
    
    def __repr__(self):
        return f'Employee(name = {self.name}, age = {self.age}, id = {self.eid})'

employeeObject = Employee('employeeName', 20, 1101)

print(employeeObject)
print(repr(employeeObject))

Outputs:

1101: employeeName
Employee(name = employeeName, age = 20, id = 1101)

Other Base Functions to Override.

Addition, Subtraction, Multiplication, Division

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def __add__(self, other_point):
        return Point(self.x + other_point.x, self.y + other_point.y)

    def __str__(self):
        return f"Point({self.x}, {self.y})"

p1 = Point(1,2)
p2 = Point(3,4)
p3 = p1 + p2 # This is possible due to the override of __add__()
print(p3) # Outputs Point(4,6)

The built-in arithmetic operators can be overridden to allow your custom class objects to interact with them. The subtraction, multiplication, and division operators will be overridden similar to the addition method above.

__add__() --> addition operator (+)
__sub__() --> addition operator (-)
__mul__() --> addition operator (*)
__div__() --> addition operator (/)

Make our objects comparable

__eq__(self, other): Checks if two objects are equal (==).
__ne__(self, other): Checks if two objects are not equal (!=).
__lt__(self, other): Checks if the object is less than another (<).
__le__(self, other): Checks if the object is less than or equal to another (<=).
__gt__(self, other): Checks if the object is greater than another (>).
__ge__(self, other): Checks if the object is greater than or equal to another (>=).
# Example Medals based on placement
# Gold > Silver > Bronze > All of the rest
class Medals:
    def __init__(self, rank):
        self.__colour = self.setColour(rank)
        
    @property
    def colour(self):
        return self.__colour
    
    @colour.setter
    def colour(self, rank):
        self.__colour = self.setColour(rank)
    
    def setColour(self, rank):
        if rank == 1:
            self.__colour = "Gold"
        elif rank == 2:
            self.__colour = "Silver"
        elif rank ==3 :
            self.__colour = "Bronze"
        else:
            self.__colour = None
        
        return self.__colour

    def __eq__(self, other_medal):
        return self.colour == other_medal.colour
    
    def __ne__(self, other_medal):
        return self.colour != other_medal.colour
    
    def __lt__(self, other_medal):
        if self.colour == "Gold":
            return False
        elif self.colour == "Silver":
            return other_medal.colour == "Gold"
        elif self.colour == "Bronze":
            return other_medal.colour in {"Silver", "Gold"}
        else:
            return other_medal.colour in {"Bronze", "Silver", "Gold"}
    
    def __le__(self, other_medal):
        return self.__lt__(other_medal) or self.__eq__(other_medal)
    
    def __gt__(self, other_medal):
        if self.colour != other_medal.colour:
            if self.colour == "Gold":
                return True
            elif self.colour == "Silver":
                return other_medal.colour != "Gold"
            elif self.colour == "Bronze":
                return other_medal.colour not in {"Gold", "Silver"}
        else:
            return False
    
    def __ge__(self, other_medal):
        return self.__gt__(other_medal) or self.__eq__(other_medal)
        
    
v1 = Medals(1)
v2 = Medals(2)
v3 = Medals(3)
v4 = Medals(3)
v5 = Medals(5)

print(v1 != v2) # True
print(v3 == v4) # True
print(v1 < v2) # False
print(v3 < v1) # True
print(v5 < v1) # True
print(v5 <= v4) # True

If you need more overrides for built-in features of Python, please let me know!

🐍
🤯
str()
repr()