Document Types
The theory embedded in the source code below:- Encapsulation - grouping, hiding or protecting methods or variables
- Abstraction - hiding implementation details from the user, e.g.:
self.somethingElse = AnotherClass.someOtherMethod("who knows") - Polymorphism - create an abstract or virtual implementation, which must be redefined
- Polymorphism - assign a different meaning or usage to something in different contexts
- Inheritance - the child class inherits this variable from the parent
- Recursion - a function that calls itself
doc types.py
class Document:
def __init__(self, filename):
#!!!!!!!!
#Encapsulation - grouping, hiding or protecting methods or variables:
self.publicVariable = 5
self._protectedVariable = filename
self.__privateVariable = "hidden from child class with the __"
#!!!!!!!!
#Abstraction - hiding implementation details from the user (dont try and run this next line):
#self.somethingElse = AnotherClass.someOtherMethod("who knows")
#!!!!!!!!
#Polymorphism - create an abstract or virtual implementation, which must be redefined:
def show(self):
raise NotImplementedError("Subclass must implement abstract method")
class Pdf(Document):
#!!!!!!!!
#Polymorphism - assign a different meaning or usage to something in different contexts:
def show(self):
#!!!!!!!!
#Inheritance - the child class inherits this variable from the parent:
return self._protectedVariable
class Word(Document):
def show(self):
return 'i refuse to participate in this rubbish class activity'
#!!!!!!!!
#Recursion: a function that calls itself:
def playRecursiveGame(self, X, Y=None):
if Y==None:
Y=self.publicVariable
if X < Y:
print("your number:", X, "my number:", Y, "..haha i always win!")
else:
#!!!!!!!!
#Recursion: this is the recursive function call:
print("your number:", X, "my number:", Y)
return self.playRecursiveGame(X-1, Y+1)
#-----------MAIN:
documents = [Pdf('Document1'),
Pdf('Document2'),
Word('Document3')]
anotherDoc = Word('Document4')
for document in documents:
print(document.show())
anotherDoc.playRecursiveGame(21)