반응형
[2021.10.29] How to import class from another file in Python?
이번 게시글은 Python 코드를 class로 작성한 후, class를 호출하는 방법에 대해 알아보도록 하자.
1. class로 작성한 .py파일 만들기
# 생성자
class Node:
def __init__(self, item):
self.data = item # 67
self.next = None # 처음 생성할 땐 다음에 붙을 게 없기 때문에 None(Next)
# 비어 있는 연결 리스트
class LinkedList:
def __init__(self):
self.nodeCnt = 0
self.head = None # 처음 생성할 땐 Head가 아무것도 가리키지 않음
self.tail = None # 처음 생성할 땐 tail가 아무것도 가리키지 않음
# ★★★★★ class를 출력하게 해주는 함수 ★★★★★
def __repr__(self):
if self.nodeCnt == 0:
return 'LinkedList: empty'
s = ''
current = self.head
# current.head가 존재 한다면~~
while current is not None:
s += repr(current.data)
# 다음 노드가 존재 한다면~~
if current.next is not None:
s += ' -> '
current = current.next
return s
# 특정 원소 참조(k 번째)
def getAt(self, pos):
# pos 가 0보다 작거나 같은지? 또는 pos가 가지고 있는 노드수 보다 크면 None 반환
if pos < 1 or pos > self.nodeCnt:
return None
# 노드를 1로 줌
idx = 1
current = self.head
while i < pos:
current = current.next
idx += 1 # 1씩 증가함으로써 다음 번 노드를 가리키기 위함
return current
# 원소 삽입
def insertAt(self,pos,newNode):
# pos 가 올바른 위치에 있는 가?
if pos < 1 or pos > self.nodeCnt + 1:
return False
# pos가 1(prev가 없음)
if pos == 1:
newNode.next = self.head # 원래 head는 newNode.next를 가리키도록 함
self.head = newNode # head는 새로운 노드를 가리킨 후
# pos가 리스트 첫 번째가 아니라면?
else :
# 삽입하려는 위치가 리스트 맨 끝일 땐? (pos == nodeCnt + 1)
if pos == self.nodeCnt + 1 :
prev = self.tail
else :
prev = self.getAt(pos-1)
newNode.next = prev.next # 삽입하려는 노드는 pos-1번째의 next로 하고
prev.next = newNode # new노드의 앞을 가리키게 하는 것은 prev.next로
# 위치와 노드가 같다면?
if pos == self.nodeCnt + 1 :
self.tail = newNode
self.nodeCnt += 1
return True
# 길이 얻어내기
def getLength(self):
return self.nodeCnt
# 연결 리스트 순회
def traverse(self):
result = []
curr = self.head
while curr is not None:
result.append(curr.data)
curr = curr.next
return result
# 두 연결 리스트를 이어 붙임
def concat(self, L):
self.tail.next = L.head
if L.tail:
self.tail = L.tail
self.nodeCnt += L.nodeCnt
* 자료구조 - 연결 리스트 1,2 공부를 했을 때 사용한 코드를 Linked_list.py로 만들었다.
2. 다른 파일에서 .py 파일 호출 하기(class file)
from 파일명.py import *
-> 파일명.py에 있는 모듈을 전부 호출하겠다는 의미
from Linked_list import *
a = Node(67)
b = Node(34)
c = Node(28)
L = LinkedList()
<출력 결과>
반응형
댓글