본문 바로가기

STUDY/Python

[Python] 패키지 / 객체 지향 프로그래밍 / 클래스

 

이 글은 24.01.09에 본인 벨로그에 작성했던 글을 옮겨 온 것이다.

 

패키지

  • 패키지란?
    => 간단히 말해, 여러 모듈들을 용도, 타입 등 관련 있는 카테고리로 묶어놓은 것.
    => 같은 이름의 모듈을 구별하는 용도로도 사용한다.
# 각각 cal_for_int, cal_for_float라는 패키지에 add라는 모듈을 만들었다.
# 모듈 이름과 쓰임새는 같으나 적용 대상이 다르다(int와 float)
# 이렇게, 같은 이름의 모듈을 구별해줄 때에 사용할 수 있다.


# input

from cal_for_int import add
print(add.add(1.2,2))

from cal_for_float import add
print(add.add(1.2, 2))
==============================
# output

3
3.2

 

  • 패키지를 어떤 경로에서든 사용할 수 있게 하는 것이 site-pakages라는 디렉토리다.
    => 해당 디렉토리에 패키지를 두면 어디서든 사용 가능하다.

 

자주 쓰는 외부 모듈

  • math모듈
    fabs(x) : x의 절대값(실수) // ceil(x) : x 올림 // floor(x) : x 내림
    trunc(x) : x 소수점 이하 버림 // gcd(x, y) : x와 y의 최대공약수
    factorial(x) : x의 팩토리얼
  • time 모듈
    localtime() : 시스템에 표시되는 현재 시각 반환

 

객체 지향 프로그래밍/클래스와 객체 생성/객체 속성 변경

  • 객체지향 프로그래밍 : 객체를 이용한 프로그래밍.
    1) 객체Object = 속성Attribute(변경 가능) + 기능Function
    2) 객체는 클래스Class(속성과 기능을 정의함)에서 생성된다.
    3) 장점 : 코드 재활용 및 모듈화가 편하다
  • 클래스 생성
    1) class를 만든다(class 키워드와 속성, 기능을 이용해서 만듦).
    2) class의 생성자를 호출해서 객체를 만든다.

# input

class car:  # 'car'라는 이름의 class 만들기

    def __init__(self, col, len):   # 속성 정의함.
        self.color=col
        self.length=len

    def stop(self):     # 기능 정의함
        print('stop')

    def start(self):    # 기능 정의함
        print('start')  

car1 = car('red', 200)      # 'car'라는 class로부터 'car1'이라는 객체 생성.

print(car1.color)       # car1 객체의 color속성 출력
print(car1.length)      # car1 객체의 length속성 출력
car1.stop()             # car1 객체의 stop 기능 사용
car1.start()            # car1 객체의 start 기능 사용 
====================================================
# output

red
200
stop
start
# 예시.

class cal:
    def __init__(self):
        self.num1 = 0
        self.num2 = 0
        self.result = 0

    def add(self):
        self.result = self.num1 + self.num2
        return self.result

    def sub(self):
        self.result = self.num1 - self.num2
        return self.result

    def mul(self):
        self.result = self.num1 * self.num2
        return self.result

    def div(self):
        self.result = self.num1 / self.num2
        return self.result

cal1 = cal()

cal1.num1 = 10
cal1.num2 = 20
print(cal1.add())
print(cal1.sub())
print(cal1.mul())
print(cal1.div())
============================================
30
-10
200
0.5

 

객체와 메모리

  • 객체와 메모리.
    => class로부터 객체가 생성되면 메모리에 저장되고
    => 변수에 객체를 할당하면, 객체 데이터가 아닌 객체의 메모리 주소가 할당된다.
    => 변수는 이 주소를 이용해서 메모리로부터 객체를 참조하여 동작하는 것.
    => 이런 특성으로 인해 reference(참조) 변수 라고도 부름.

 

클래스 상속

  • 클래스는 또 다른 클래스를 상속해서 사용할 수 있다.

# 예시

# input

class normal_car:       # normal_car라는 class 생성
    def drive(self):
        print('my car drive() called.')

    def back(self):
        print('my car back() called.')

class turbo_car(normal_car):    # normal_car class를 상속하는 turbo_car class 생성.
    def turbo(self):
        print('my car turbo() called.')

car1 = turbo_car()

car1.drive()    
car1.back()     
car1.turbo()
========================================================
# output

my car drive() called.	# normal_car class를 상속한 덕분에
my car back() called.	# turbo_car class에 정의하지 않은 기능도 사용 가능하다.
my car turbo() called.

 

다중 상속

  • 2개 이상의 클래스를 상속한다.
    상속 방법은 단일 상속과 동일하다.

# input(1)

class car1:
    def drive(self):
        print('drive~!')
class car2:
    def turbo(self):
        print('turbo~!!')
class car3:
    def fly(self):
        print('fly!!!!')

class car(car1, car2, car3):	# car class가 car1, car2, car3 class를 상속받음.
    def __init__(self):
        pass

car1 = car()
car1.drive()
car1.turbo()
car1.fly()
=============================
# output(1)

drive~!
turbo~!!
fly!!!!
# input(2)

class BasicCal:
    def add(self, n1, n2):
        return n1+n2
    def sub(self, n1, n2):
        return n1-n2
    def mul(self, n1, n2):
        return n1*n2
    def div(self, n1, n2):
        return n1/n2
class DevelopCal:
    def mod(self, n1, n2):
        return n1%n2
    def flo(self, n1, n2):
        return n1//n2
    def exp(self, n1, n2):
        return n1**n2
class cal(BasicCal, DevelopCal):
    def __init__(self):
        pass

calcul = cal()
print(calcul.add(5,6))
print(calcul.sub(5,6))
print(calcul.mul(5,6))
print(calcul.div(5,6))
print(calcul.mod(5,6))
print(calcul.flo(5,6))
print(calcul.exp(5,6))
=======================================
# output(2)

11
-1
30
0.8333333333333334
5
0
15625