세로형
Link
12-09 20:03
«   2021/12   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Archives
Today
1,909
Total
1,978,834
관리 메뉴

꿈 많은 사람의 이야기

파이썬 모듈(import) 다루기(__name__ 의미 및 클래스, 함수 import) 본문

python

파이썬 모듈(import) 다루기(__name__ 의미 및 클래스, 함수 import)

오키여 이수진의 블로그 2017. 11. 22. 10:30

파이썬에서는 모듈을 다룰 수 있습니다

본인이 직접 만들 수도 있구요, 다른 사람이 만든 것을 가지고 올 수도 있습니다

import라는 것을 써서 말이죠

모듈로 관리하게 되면 기능을 나누어서 관리할 수 있습니다

그래서 관리도 용이하고 사용하기도 편하죠

만약 내가 현재 A 라는 기능을 쓰고 있는데 '아 언젠가는 다시 쓸 것 같은데?' 라고 생각해서 파일을 만들었습니다

그리고 B라는 작업을 하는데 이때 A라는 작업이 필요하게 되었어요

근데 B라는 파일에 다시 A의 기능을 코딩을 한다?

물론 해도 좋지만 귀찮고, 시간 낭비에 좀 비효율적이죠

A라는 파일이 이미 있는데 굳이 만들 필요가 없죠

이럴때 import를 이용해서 모듈을 가지고 옵니다

 

저는 이 모듈 실습을 위해 총 4개의 파일을 준비했어요

 

빨간색 선을 기준으로 왼쪽이 메인, 오른쪽이 모듈이라고 생각하시면 됩니다.

각 파일은 아래와 같은 내용이 적혀있습니다

 

 

2번 파일은 sum 함수가 들어있어요

이 기능은 a 라는 타입이 int가 아니면 더할 수 없다고 나오고요

int면 둘 값을 더해서 return 해줍니다.

 

 

3번 파일은 __name__ == "__main__" 이라는 기능을 소개하는 파일이에요

이것에 대한 설명은 밑에서 할게요

일단은 3번 파일은 이런 내용이라는 것입니다.

 

 

4번 파일은 클래스가 있어요

Math라는 클래스와 그 밑에 sum이라는 함수가 있네요

그리고 클래스에 속하지 않는 mul이라는 함수도 있어요

자 이제 모듈을 공부해보죠

 

 

1번 파일 기준에서 import하며 사용합니다.

먼저 2번 파일을 import해보죠!

 

자 이렇게 import하면 2번 파일의 기능을 쓸 수 있습니다

근데 1번의 매개변수가 숫자가 아니네요?

그래서 결과는 더할 수 없다고 나옵니다.

이렇게 사용할 수 있어요

근데 이게 좀 귀찮죠?

파일명.기능  으로 접근을 해야하는데요

파일명이 길면 정말 난처합니다

그래서 from ~ import 절을 쓸 수 있어요

 

from 2번파일에서 import *(모든 것) 처럼 사용하면 그냥 sum()과 같이 사용할 수 있습니다

만약 sum 함수만 가지고 오고 싶으면 from 2번 파일 import sum 을 하면 됩니다!

 

 

이렇게 결과가 나오네요!

 

이제 3번 파일을 불러오죠

3번 파일은 __name__을 테스트 하는 파일입니다.

__name__은 현재 모듈의 이름을 담고 있는 내장 변수입니다.

즉 __name__이 있는 파일이 AAA.py 이면 __name__ 변수에는 __main__이라는 값이 들어가 있는것이죠

하지만 이 파일을 외부에서 실행한다면?

__name__은 다른 값이 들어갑니다.

즉 __name__이 있는 파일 AAA가 들어가게 되죠

 

한마디로 어디서 이 모듈을 실행했느냐에 따라 __name__에 들어가는 값이 달라집니다

그래서 외부에서 실행했을 때, 내부에서 실행했을 때를 나누어서 처리할 때 사용할 수 있죠

한번 봐볼까요

 

먼저 3번 파일을 직접 실행해보죠

 

이렇게 나옵니다.

본인이 직접 실행했으니 __name__ 변수에는 __main__ 값이 들어갑니다

그리고 외부에서 실행해볼까요

 

 

외부에서 실행해보니 이 3번 파일 이름인 Study_11_15_3이 나오고 있습니다.

__name__은 이런 값을 담을 수 있습니다

 

이제 4번 파일을 불러와보죠

4번 파일은 클래스가 있습니다.

클래스는 객체로 만들어야하죠?

 

 

Math라는 클래스를 참조하는 a 객체를 생성했습니다.

즉 a는 Math의 인스턴스이죠

그래서 a.sum( )으로 클래스 내부의 함수로 접근할 수 있습니다.

객체지향 및 클래스에 대한 것이 이해가 안가시면 이쪽을 공부 더 하고오세요!

또한, 클래스에 속하지 않은 mul이라는 함수는 그냥 호출 할 수 있습니다

클래스에 속하지 않고 그냥 파일에 있으니까요 ㅎㅎ

여기까지 공부 마치겠습니다

반응형
그리드형
2 Comments
  • 프로필사진 gma's 2021.01.09 16:53 그러면 1번파일에서 4번파일을 import하고 4번파일에서 1번 파일을 import해서 사용 할 순 없는건가요?
    이런형식으로 구현하려는데 자꾸 에러가 나서요.
    1번과 4번에 클래스를 만들고 인스턴스를 서로 공요해서 사용하려는데 단방향은 되지만 서로 import하면 파일을 찾을 수 없다고 나와서 머리싸매고 있어요....
  • 프로필사진 오키여 이수진의 블로그 2021.01.09 21:58 신고 안녕하세요.
    1번 <-> 4번을 왜 서로 import를 하실까요?
    만약 이렇게 접근하실꺼면 차라리 1번, 4번 따로 만들고 main을 따로 만들어서 1, 4번을 따로 불러오셔서 사용하시는 것이 낫지 않을까요?
    말씀하신대로 클래스로 만들어서 인스턴스화 시키는 작업 용도로 1, 4번을 사용하시면 될 것 같습니다.
댓글쓰기 폼