엄밀히 말하면 과제는 아닌데 수업 중 했던 클래스만들기 복습차 해봄

 

목표

두 수를 입력을 받아서 사칙연산을 구현하는 클래스 만들기

============================================================================

[step 1 : 생성자로 멤버변수에 값을 저장하고 변수를 이용해 사칙연산을 계산하는 함수를 코드로 작성]

class Calc:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def add(self):
        return self.x + self.y

    def sub(self):
        return self.x - self.y

    def mul(self): 
        return self.x * self.y

    def div(self): 
        return self.x / self.
        
        
if __name__ == '__main__':
    m = Calc(200, 100)
    print(m.add())
    print(m.sub())
    print(m.mul())
    print(m.div())
    
    
#result
300
100
20000
2.0

 

============================================================================

[step 2 : 멤버변수 은닉을 위해 private으로 바꾸고 getter&setter 함수 작성(캡슐화)]

class Calc:
    def __init__(self, x, y):
        self.__x = x
        self.__y = y

#============추가============
    def get_x(self):
        return self.__x

    def get_y(self):
        return self.__y

    def set_x(self, x):
        self.__x = x

    def set_y(self, y):
        self.__y = y
#============추가============

    def add(self):
        return self.__x + self.__y

    def sub(self):
        return self.__x - self.__y

    def mul(self):
        return self.__x * self.__y

    def div(self):
        return self.__x / self.__y
        
        
if __name__ == '__main__':
    m = Calc(200, 100)
    print("{0} + {1} = {2}".format(m.get_x(), m.get_y(), m.add()))
    print("{0} - {1} = {2}".format(m.get_x(), m.get_y(), m.sub()))
    print("{0} * {1} = {2}".format(m.get_x(), m.get_y(), m.mul()))
    print("{0} / {1} = {2}".format(m.get_x(), m.get_y(), m.div()))
    print()
    m.set_x(400)
    m.set_y(200)
    print("{0} + {1} = {2}".format(m.get_x(), m.get_y(), m.add()))
    print("{0} - {1} = {2}".format(m.get_x(), m.get_y(), m.sub()))
    print("{0} * {1} = {2}".format(m.get_x(), m.get_y(), m.mul()))
    print("{0} / {1} = {2}".format(m.get_x(), m.get_y(), m.div()))
    
    
#result
200 + 100 = 300
200 - 100 = 100
200 * 100 = 20000
200 / 100 = 2.0

400 + 200 = 600
400 - 200 = 200
400 * 200 = 80000
400 / 200 = 2.0

 

============================================================================

[step 3 : 출력문 작성]

class Calc:
    def __init__(self, x, y):
        self.__x = x
        self.__y = y

    def get_x(self):
        return self.__x

    def get_y(self):
        return self.__y

    def set_x(self, x):
        self.__x = x

    def set_y(self, y):
        self.__y = y

    def add(self):
        return self.__x + self.__y

    def sub(self):
        return self.__x - self.__y

    def mul(self):
        return self.__x * self.__y

    def div(self):
        return self.__x / self.__y
        
#============추가============
    def prn(self):
        print("{0} + {1} = {2}".format(self.__x, self.__y, self.add()))
        print("{0} - {1} = {2}".format(self.__x, self.__y, self.sub()))
        print("{0} * {1} = {2}".format(self.__x, self.__y, self.mul()))
        print("{0} / {1} = {2}".format(self.__x, self.__y, self.div()))
        print()
#============추가============
        
        
if __name__ == '__main__':
    m = Calc(200, 100)
    m.prn()
    m.set_x(400)
    m.set_y(200)
    m.prn()
    
    
#result
200 + 100 = 300
200 - 100 = 100
200 * 100 = 20000
200 / 100 = 2.0

400 + 200 = 600
400 - 200 = 200
400 * 200 = 80000
400 / 200 = 2.0

 

============================================================================

[steep 4 : 모듈화 후 import해서 사용]

Calc.py

class Calc:
    def __init__(self, x, y):
        self.__x = x
        self.__y = y

    def get_x(self):
        return self.__x

    def get_y(self):
        return self.__y

    def set_x(self, x):
        self.__x = x

    def set_y(self, y):
        self.__y = y

    def add(self):
        return self.__x + self.__y

    def sub(self):
        return self.__x - self.__y

    def mul(self):
        return self.__x * self.__y

    def div(self):
        return self.__x / self.__y
        
    def prn(self):
        print("{0} + {1} = {2}".format(self.__x, self.__y, self.add()))
        print("{0} - {1} = {2}".format(self.__x, self.__y, self.sub()))
        print("{0} * {1} = {2}".format(self.__x, self.__y, self.mul()))
        print("{0} / {1} = {2}".format(self.__x, self.__y, self.div()))
        print()

 

init.py

from com.test.Calc import Calc
# 패키지안의 파일명, 파일안의 클래스명

if __name__ == '__main__':
    m = Calc(200, 100)
    m.prn()
    m.set_x(400)
    m.set_y(200)
    m.prn()
    
    
#result
200 + 100 = 300
200 - 100 = 100
200 * 100 = 20000
200 / 100 = 2.0

400 + 200 = 600
400 - 200 = 200
400 * 200 = 80000
400 / 200 = 2.0

 

============================================================================

[step 5 : 상속, 추상화, subtyping 해보기]

Calc.py

#============추가============
from abc import abstractmethod, ABCMeta
#============추가============


# metaclass=ABCMeta 추가
class Calc(metaclass=ABCMeta):
    def __init__(self, x, y):
        self.__x = x
        self.__y = y

    def get_x(self):
        return self.__x

    def get_y(self):
        return self.__y

    def set_x(self, x):
        self.__x = x

    def set_y(self, y):
        self.__y = y

    def add(self):
        return self.__x + self.__y

    def sub(self):
        return self.__x - self.__y

    def mul(self):
        return self.__x * self.__y

    def div(self):
        return self.__x / self.__y
        
#============추가============
    @abstractmethod
    def mod(self):
        pass
#============추가============
        
    def prn(self):
        print("{0} + {1} = {2}".format(self.__x, self.__y, self.add()))
        print("{0} - {1} = {2}".format(self.__x, self.__y, self.sub()))
        print("{0} * {1} = {2}".format(self.__x, self.__y, self.mul()))
        print("{0} / {1} = {2}".format(self.__x, self.__y, self.div()))
        print()

 

init.py

from com.test.Calc import Calc


class MyCalc(Calc):
    def __init__(self, a, b):
        super().__init__(a, b)

    def mod(self):
        return self.get_x() % self.get_y()

    def prn(self):
        print("{0} % {1} = {2}".format(super().get_x(), super().get_y(), self.mod()))
        super().prn()
      

if __name__ == '__main__':
    m = MyCalc(200, 100)
    m.prn()
    m.set_x(400)
    m.set_y(200)
    m.prn()
    
    
#result
200 % 100 = 0
200 + 100 = 300
200 - 100 = 100
200 * 100 = 20000
200 / 100 = 2.0

400 % 200 = 0
400 + 200 = 600
400 - 200 = 200
400 * 200 = 80000
400 / 200 = 2.0

============================================================================

+ Recent posts