외부 파일에 정의된 변수,함수, 클래스를 활용하는 방법
쓰는 방법이 몇가지 있음
핵심 키워드는
import , from
아래 예시의 경우
temp_blog.py 에 정의된 내용을
temp_blog1.py에서 사용하려는 상황임
#temp_blog.py
test_var = 123
def test_fun(data1,data2):
sum=data1 + data2
class test_class():
def __init__(self):
self.mul=0
def test_method(self,data1 ,data2):
self.mul = data1 * data2
1. import temp_blog
라고 선언 후
temp_blog.변수
temp_blog.method
이런 식으로 원본이 있는 py 파일의 이름뒤에 점을 붙여서 접근한다.
아래 예시 보면 쉽게 이해 가능
#temp_blog1.py
import temp_blog
########## temp_blog.py 파일 내에 정의된 변수 가져옴
print(temp_blog.test_var)
########## temp_blog.py 파일 내에 정의된 함수 호출
temp_blog.test_fun(3,4)
########## temp_blog.py 파일 내에 정의된 클래스로 객체 생성 및 메소드 호출
obj = temp_blog.test_class()
obj.test_method(3,4)
2. from temp_blog import test_var
from "파일이름" import 사용하려는 변수,함수,클래스 이름
이런식으로 사용하면 앞의 1번처럼
temp_blog.test_var 이렇게 접근 할 필요 없이
곧바로 test_var 이라고 해서 사용해도 된다.
아래 예시 참고.
#temp_blog1.py
import temp_blog
from temp_blog import test_var
########## temp_blog.py 파일 내에 정의된 변수 가져옴
# # temp_blog.testvar 이라고 호출 할 필요가 없음. # 앞에서 from temp_blog import test_var 을 선언했기 때문
print(test_var)
########## temp_blog.py 파일 내에 정의된 함수 호출
temp_blog.test_fun(3,4)
########## temp_blog.py 파일 내에 정의된 클래스로 객체 생성 및 메소드 호출
obj = temp_blog.test_class()
obj.test_method(3,4)
3. from temp_blog import *
import * 을 하면 temp_blog.py 파일에 정의된 모든 것을 가져온다는 의미가 된다.
그래서 아래 예시를 보면 이제 temp_blog. 이라는 prefix 없이도 곧바로 사용할 수 있다.
#temp_blog1.py
from temp_blog import *
########## temp_blog.py 파일 내에 정의된 변수 가져옴
print(test_var)
########## temp_blog.py 파일 내에 정의된 함수 호출
test_fun(3,4)
########## temp_blog.py 파일 내에 정의된 클래스로 객체 생성 및 메소드 호출
obj = test_class()
obj.test_method(3,4)
외부 파일에서 선언된 클래스 객체에 접근해서 해당 객체의 메소드를 호출하는 예시를 보자.
아래와 같이 사용해도 의외로 동작이 정상적으로 된다.
temp_blog1.py 입장에서는 temp_blog.py에 정의된 클래스와 관련해서 import 하는 정보가 전혀 없는데다가
temp_blog1.py에 정의된 함수 extern_fun 입장에서는 argument로 무엇이 들어올지도 못하는 상황에서
temp_blog.py에 정의된 클래스 내의 method를 호출하도록 코드를 만들어놨다.
그래서 당연히 문제 있을 줄 알았는데 런타임에 돌아가는 파이썬이라 그런지 의외로 문제가 없음을 확인하였다.
근데 이렇게 변수의 argument로 객체를 넘겨주는거 말고 그냥 extern 변수처럼 접근할 방법 없나 모르겠다
#temp_blog.py
from temp_blog1 import *
class test_class():
def __init__(self):
self.mul=0
def test_method(self,data1 ,data2):
self.mul = data1 * data2
print("mul = %d" %self.mul)
test_obj = test_class()
extern_fun(test_obj)
#temp_blog1.py
def extern_fun(obj):
obj.test_method(3,4)
'프로그래밍 관련 > 파이썬' 카테고리의 다른 글
파이썬 정규식 예시들 (0) | 2021.10.23 |
---|---|
파이썬. 숫자를 문자로. 문자를 숫자로. 자리수도 맞춰서. 16진수 변환 등등 (0) | 2021.10.22 |
파이썬으로 외부 프로그램 실행하기 (0) | 2021.10.13 |
파이썬 . 정규표현식.정규식. re 라이브러리 -메타문자들 (0) | 2021.09.27 |
파이썬 . 정규표현식.정규식. re 라이브러리 (0) | 2021.09.27 |