이번에는 앞에서 만든 새로운 거북이 클래스를 별도의 모듈로 만들어 보겠습니다.
거북이를 사용할때는 아래처럼 파이썬의 기본 모듈을 import 를 했었습니다.
import turtle
그럼 새로 만든 클래스도 기본 모듈처럼 import 할수 있지 않을까요? 즉 이런걸 하고 싶은거죠.
import my_turtle
모듈 파일 생성
그러기 위해서는 my_turtle.py 라는 파일을 먼저 만들어야 합니다. 파일이름이 모듈이름이 되는겁니다.
my_turtle.py 의 내용
import turtle # 상속을 받았기 때문에, 기본 모듈을 불러와야 합니다. class Turtle_new(turtle.Turtle): def box(self, pos_x, pos_y, x, y, color): self.penup() self.goto(pos_x - x/2,pos_y - y/2) self.pendown() self.speed('fast') self.color(color) self.begin_fill() self.fd(x) self.left(90) self.fd(y) self.left(90) self.fd(x) self.left(90) self.fd(y) self.left(90) self.end_fill()
그리고 앞에서 만든 클래스를 그대로 붙여넣기 해줍니다. 상속을 받은 클래스이기 때문에, turtle 을 import 하는 명령어도 같이 넣어줘야 합니다.
그리고 원래 파일에서는 class 정의 부분을 지우고, import my_turtle 이라는 명령어로 대체해줍니다. 그러면 아래와 같은 모양이 될겁니다.
import my_turtle t1 = my_turtle.Turtle_new() t2 = my_turtle.Turtle_new() t3 = my_turtle.Turtle_new() t1.shape('turtle') t1.color('red') t1.fd(50) t1.box(100,0,50,50,'red') t2.shape('turtle') t2.color('blue') t2.left(90) t2.fd(70) t2.box(0,100,50,50,'blue') t3.shape('turtle') t3.color('green') t3.box(-50,0,80,50,'green') turtle.exitonclick()
모듈 이름이 좀 길어서 귀찮으면 아래처럼
import my_turtle as t
별명을 붙여주면 객체를 생성하는 명령이 아래처럼 간단해집니다.
t1 = t.Turtle_new() t2 = t.Turtle_new() t3 = t.Turtle_new()
문제점
실행을 해보면, 한가지 문제가 있습니다. 맨 마지막에, 클릭시 창을 닫는 명령어가 기본 turtle 모듈을 사용하고 있는데, 현재 파일에서는 기본 turtle 모듈을 불러오지 않았고, my_turtle 만 import 를 해줬죠. 그래서 현재는 오류가 나는데, 이건 좀더 알아보고 있는 중입니다만, 현재까지는 두가지 해결방법이 있습니다.
1. 현재 파일에 turtle 모듈을 import 를 해준다.
import turtle import my_module
2. 새로 만든 my_turtle 모듈의 모든 내용을 import 한다
import my_module from my_turtle import *
해결은 됐지만, 올바른 사용법인지는 좀더 알아봐야겠네요.