본문 바로가기
KOOC/Linear Structure & Dynamic Programming

Python Overview <1-4>

by dataart 2023. 9. 21.

 

<< 1주차 Lecture Note 4번째 >>

  • Class
  • Module

 

Class

클래스는 인스턴스를 생성하는 생성자 역할을 한다.

 

1. Basic

 

class MyHome:
    
    # 인스턴스 생성 시점의 초기 설정값
    colorRoof = 'red'
    stateDoor = 'closed'
    
    # 인스턴스에서 사용하는 function(메서드)
    def paintRoof(self, color):
        self.colorRoof = color
        
    def openDoor(self):
        self.stateDoor = 'open'
    
    def closeDoor(self):
        self.stateDoor = 'close'

클래스의 기본 구조는 위 코드와 같다.

home_a = MyHome()
home_b = MyHome()

print(home_a is home_b)

False

 

클래스 정의후 home_a와 home_b 인스턴스를 생성하면, 각각 다른 object ID를 갖게 된다.

따라서, 'is' 로 동일한 레퍼런스를 바라보는지 확인해보면 'False'가 출력된다.

 

클래스의 사용은 아래처럼 한다.

home_a = MyHome() # 인스턴스 생성

print(home_a.colorRoof) # 인스턴스의 설정값 출력
print(home_a.stateDoor)
print('-------------------')

home_a.paintRoof('blue') # 인스턴스의 메서드 사용
home_a.openDoor()
print(home_a.colorRoof) # 메서드 사용 후 변경된 설정값 출력
print(home_a.stateDoor)

출력 결과

red
 closed
-------------------
 blue
 opened

 

클래스로 인스턴스를 생성한 후, 메서드를 사용함으로써 설정값이 변화하는 것을 볼 수 있다.

 

2. Constructor & Deconstructor

위 Basic에서는 class에 function들을 직접 정의했다.

사용자가 직접 정의하는 함수 외에, 파이썬에서 class에 기본적으로 제공하는 함수들이 있는데, 그것을 Constructor* 라고 칭한다.

* Constructor : class의 인스턴스를 생성하는 시점(instantiated)에 Call 되는 함수, 멤버 function이라고도 함.

 

Deconstructor는 인스턴스를 삭제할 때 사용하며, __del__ 로 정의한다.

 

예시 코드를 보자.

class MyHome:
    
    # 인스턴스 생성 시점의 초기 설정값
    colorRoof = 'red'
    stateDoor = 'closed'
    
    # Constructor
    def __init__(self, name):
        self.Name = name
    
    # Deconstructor
    def __del__(self):
    	print("Destroyed")
    
    # 인스턴스에서 사용하는 function(메서드)
    def paintRoof(self, color):
        self.colorRoof = color
        
        
# Construct
home = MyHome('SeoulHome')

print(home.Name)
print('--------------')

# Deconstruct
del home

print(home.Name)

출력 결과

SeoulHome
 --------------
 Destroyed

 

코드에서 보듯이, home 인스턴스를 생성할 떄 Basic과 다르게 class에 파라미터를 입력했다.

이 파라미터는 __init__ 함수의 name 파라미터로 전달되며, 인스턴스를 생성하는 시점에 Name이라는 변수가 함께 생성된다.

 

del home 코드 실행시 'Destroyed' 가 출력되며, 인스턴스 삭제 후 삭제된 인스턴스를 실행하려고 하면 아래 오류가 발생한다.

{
"name": "NameError",
"message": "name 'home' is not defined",
"stack": "---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)


NameError: name 'home' is not defined"
}

 


Module

 

파이썬의 모듈은 클래스를 담은 파일을 말한다. (.py 파일)

파이썬의 특정 파일에서 모듈을 불러오고, 그 모듈에 정의된 클래스를 사용할 수 있다.

이 기능으로 파이썬의 실행 코드는 가독성을 높일 수 있고, 이후 유지보수나 테스트에서도 훨씬 편리하게 작용한다.

 

파이썬의 A.py 파일 또는 A.ipynb 파일에서 모듈을 import 하는 코드 예시를 보자.

from lecture_module.home import The_Home as Thome

home = Thome('IPARK')
print("첫 번째 객체 생성 완료:", home.Name)

lecture_module : 모듈을 여러개 담은 패키지(디렉토리 혹은 폴더) 이름이다.

home: .home 이 모듈인 py 파일 이름이다.

The_Home 은 모듈에 정의한 클래스 이름이고, 이것에 as 를 사용해서 별칭을 정할 수 있다.

 

특정 파일에서 모듈 내 클래스를 불러올 때에는 위 코드처럼

< from 패키지.모듈 import 클래스 >

형식으로 사용하고, 모듈 전체를 import 할 수도, 패키지 전체를 import 할수도 있는데 그건 사용 범위에 따라 다르다.

 

모듈 또한 py 파일이기때문에, Work directory 어딘가엔 존재해야 한다.

현재 내 Work directory를 간단히 보면 아래와 같다.

 

LinearStructure
├── lecture_module
│   └── home.py
├── provided_code_week_1
│  └── practice.ipynb

practice.ipynb 파일에서 home.py 모듈을 import 해서 사용하는 것이다.

반응형