본문 바로가기
프로그래밍 관련/파이썬

파이썬. 외부파일의 변수 함수 클래스 참조(import from)

by 존버매니아.임베디드 개발자 2021. 10. 22.
반응형

외부 파일에 정의된 변수,함수, 클래스를 활용하는 방법

쓰는 방법이 몇가지 있음

핵심 키워드는
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)
반응형