데이터 구조 및 분석 ch_2_4 Polymorphism and Abstract Class
Jul 9, 2021
»
writing
KAIST 산업및시스템공학과 문일철_ 데이터 구조 및 분석 수업을 참고하여 작성하였습니다
ch_2_4 Polymorphism and Abstract Class
Polymorphism and Abstract Class
1. Polymorphism (다양한 모양) - Poly : many - Morph : shape - Different behaviors with similar signature - signature : Method name + Parameter list - sub1) Method Overriding : Base class has a method num. its derived class has a method num. - sub2) Method Overloading : A class has a method num. num, name & num, name, home
class Building:
strAddress = "Daejeon"
def openDoor(self):
print("Door opened")
class Hotel :
def openDoor(self):
print("Bellboy opens a door")
def checkIn(self):
print("Someone checks in for 1 day")
def checkIn(self, days = 1):
print("Someone checks in for", days, "days")
lotteHotel = Hotel()
lotteHotel.openDoor()
lotteHotel.checkIn()
lotteHotel.checkIn(2)
# Bellboy opens a door
# Someone checks in for 1 days
# Someone checks in for 2 days
2. Abstract Class - A class with an abstract method - What is the abstract method? : Method with signature, but with no implementation - Abstract class is not a complete implementation, it is more like a half-made produce - you can't make an instance out of it - The concrete class with full implementations and inheriting the abstract class will b a basis for instatnces
import abc
class Room(object) :
__metaclass__ = abc.ABCMeta
# --> Indicator of abstract base method and class
def openDoor(self):
pass
def oepnWindow(self):
pass
class BedRoom(Room) :
def openDoor(self):
print("Open bedroom door")
def oepnWindow(self):
print("Open bedroom window")
class Lobby(Room):
def openDoor(self):
print("Open lobby door")
room1 = BedRoom()
print(issubclass((BedRoom, Room), isinstance(room1, Room)))
lobby1 = Lobby()
print(issubclass(Lobby, Room), isinstance(lobby1, Room))
# TypeError: issubclass() arg 1 must be a class
3. Overriding Methods in object - All of python classes are the descendants of object - If you don't specify the base class of your class, then your class is the direct derived class of object - object has many hidden methods : __init__ : __del__ : __eq__ : __cmp__ : __add__ - override them to make the methods behave as you please
class Room:
numWidth = 100
numHeight = 100
numDepth = 100
def __init__(self, parWidth, parHeight, parDepth):
self.numDepth = parDepth
self.numWidth = parWidth
self.numHeight = parHeight
def getVolumn(self):
return self.numDepth * self.numHeight * self.numWidth
def __eq__(self, other):
if isinstance(other, Room):
if self.getVolumn() == other.getVolumn():
# Duck Typing (막 타이핑)
# Easier to Ask for Forgiveness then Permission
return True
return False
room1 = Room(100, 20, 30)
room2 = Room(100, 10, 60)
print(room1 == room2)
#True