yes. it is both functional and object oriented
# ---------------------------------------- Object Oriented Programming ------------------------------------- #
# It Is Based On Three Pillars = Encapsulation = ( self ) / - Inheritance / - Polymorphism /
# Constructor ==> __init__(self) / self => Default Parameter // Self Can Be Named AnyThing You Need
# Class ==> / Like The Real Class And You Putted Inside Her Somethings Like = ( Constructor, Methods, Attributes )
# print( classname.__class__ ) ==> / If You Need To Know THe Class Follow What ?
# If You Wanna Run The Class You Need To Call Her In Variable = ( x = ClassName
x.Thing )
# Inheritance ==> / If You Have Class In Your Project And You Wanna Put In Something
# You Create The New Class And Give Her The Class Name You Need As A Parameter
# Polymorphism Take The Same Elements From The Inheritance But Do Something Deference Or Any Some Like
# ==> + Between The Numbers Do Addition But Between Strings Do Concatenation
# super() ==> If You Need Inheriting A Constructor From Another Class :-
# You Need Use super() Method / :-
# You Type InSide Your Class Under You //> __Init__( self, What You Need Inheriting From Old Class ) :
# super( Your Class, self ).__init__( What You Need Inheriting From Old Class, And Your New Additions ) :
# If you Need Addition Something Like :
# print( "Hello, Im From 'Super'" )
# Inheriting From Class Or More :-
# If We Have 4 Class A,B,C,D
# A Inside Her Function Do ==> ( "Doing From 'A'" )
# B Inheriting From A
# C Inside Her Function Do ==> ( "Doing From 'C'" )
# D Inheriting From B,A
# If We Run The Function Inside D Will Print ==> Doing From 'A'
# Because He Start From 'B' Because 'B' The First Class 'D' Inheriting From, After This Go
# To 'A' // Because 'B' Inheriting From 'A' Will Print => Doing From 'A' /
# If If He Does Not Find Anything In 'A'
# He Back And Go To 'C'
# If You Need Know The Way Just Type ==> print( TheClassName.mro() )