Object oriented programming (OOP)


In [27]:
class Shape:
    
    classAttrib = 0
    
    __notVisibleOutside = 0 # double underscore prefix
    
    def __init__( self, x=0, y=0):
        print ("Shape constructor")
        self.x = x
        self.y = y
        
    def __del__(self):
        class_name = self.__class__.__name__
        print (class_name, "destroyed")
        
    def setXY(self, x, y):
        self.x = x
        self.y = y
    
    def getXY(self):
        return (self.x, self.y)
        
    def setAttrib(self, attrib):
        Shape.classAttrib = attrib
In [28]:
class Triangle(Shape):
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y
        print ("Triangle constructor")
    
    def childMethod(self):
        print ('Calling child method')
        
    def __del__(self):
        class_name = self.__class__.__name__
        print (class_name, "destroyed")
    
In [29]:
triangle = Triangle(5, 2)
print( triangle.getXY() )

triangle.setXY(10, 10)
print( triangle.getXY() )

triangle.setAttrib(100)
print( triangle.classAttrib )

del triangle
Triangle constructor
(5, 2)
(10, 10)
100
Triangle destroyed

Operator overloading

In [30]:
class Vector:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def __str__(self):
        return 'Vector (%d, %d)' % (self.a, self.b)
   
    def __add__(self,other):
        return Vector(self.a + other.a, self.b + other.b)
In [31]:
v1 = Vector(2,10)
v2 = Vector(5,-2)
print (v1 + v2)
Vector (7, 8)