이번에는 앞에서 만든 새로운 거북이 클래스를 별도의 모듈로 만들어 보겠습니다.
거북이를 사용할때는 아래처럼 파이썬의 기본 모듈을 import 를 했었습니다.
1 | import turtle |
그럼 새로 만든 클래스도 기본 모듈처럼 import 할수 있지 않을까요? 즉 이런걸 하고 싶은거죠.
1 | import my_turtle |
모듈 파일 생성
그러기 위해서는 my_turtle.py 라는 파일을 먼저 만들어야 합니다. 파일이름이 모듈이름이 되는겁니다.
my_turtle.py 의 내용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 이라는 명령어로 대체해줍니다. 그러면 아래와 같은 모양이 될겁니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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() |
모듈 이름이 좀 길어서 귀찮으면 아래처럼
1 | import my_turtle as t |
별명을 붙여주면 객체를 생성하는 명령이 아래처럼 간단해집니다.
1 2 3 | t1 = t.Turtle_new() t2 = t.Turtle_new() t3 = t.Turtle_new() |
문제점
실행을 해보면, 한가지 문제가 있습니다. 맨 마지막에, 클릭시 창을 닫는 명령어가 기본 turtle 모듈을 사용하고 있는데, 현재 파일에서는 기본 turtle 모듈을 불러오지 않았고, my_turtle 만 import 를 해줬죠. 그래서 현재는 오류가 나는데, 이건 좀더 알아보고 있는 중입니다만, 현재까지는 두가지 해결방법이 있습니다.
1. 현재 파일에 turtle 모듈을 import 를 해준다.
1 2 | import turtle import my_module |
2. 새로 만든 my_turtle 모듈의 모든 내용을 import 한다
1 2 | import my_module from my_turtle import * |
해결은 됐지만, 올바른 사용법인지는 좀더 알아봐야겠네요.