1. 클래스
2. 모듈과 패키지
클래스

- 클래스 : 똑같은 무엇인가를 계속해서 만들어 낼 수 있는 설계, 틀
- 객체 : 클래스로 만든 인스턴스
- 클레스 구조
- 메소드 : 클래스 안에 구현된 함수
- 파이썬 메서드의 첫 번째 매개변수 이름은 관례적으로 self를 사용한다. 객체를 호출할 때 호출한 객체 자신이 전달되기 때문에 self를 사용한 것이다. 물론 self말고 다른 이름을 사용해도 상관없다.
- 생성자 : Constructor란 객체가 생성될 때 자동으로 호출되는 메서드를 의미한다.
- 파이썬 메서드 이름으로 __init__를 사용하면 이 메서드는 생성자가
- 상속 : 어떤 클래스를 만들 때 다른 클래스의 기능을 물려받을 수 있게 만드는 것
- class 클래스 이름(상속할 클래스 이름)
- 오버라이딩 : 부모 클래스(상속한 클래스)에 있는 메서드를 동일한 이름으로 재정의 하는 것. 메서드를 오버라이딩하면 부모클래스의 메서드 대신 오버라이딩한 메서드가 호출된다.
- 오버로딩 : 매개변수에 따라 다르게 기능하는 메서드를 중복 정의
- 예시) 4칙연산 클래스와, 거듭제곱 클래스
# 사칙연산 클래스
>>> class FourCal:
... def __init__(self, first, second):
... self.first = first
... self.second = second
... def setdata(self, first, second):
... self.first = first
... self.second = second
... def add(self):
... result = self.first + self.second
... return result
... def mul(self):
... result = self.first * self.second
... return result
... def sub(self):
... result = self.first - self.second
... return result
... def div(self):
... result = self.first / self.second
... return result
...
>>>
# 거듭제곱 클래스
>>> class MoreFourCal(FourCal):
... def pow(self):
... result = self.first ** self.second
... return result
...
>>>
모듈과 패키지

모듈
- 정의 : 함수, 변수, 클래스등을 모아 놓은 파일. 파이썬 확장자 ".py"로 만든 파이썬 파일은 모두 모듈이다.
- 모듈만들기
# mod1.py
def add(a, b):
return a + b
def sub(a, b):
return a-b
위와 같이 add와 sub 함수만 있는 파일 mod1.py를 만들고 C:\디렉터리에 저장. 이 mod1.py 파일이 바로 모듈이다
- 모듈 불러오기
C:\>python
>>> import mod1
>>> print(mod1.add(3, 4))
7
>>> print(mod1.sub(4, 2))
2
반드시 mod1.py를 저장한 C:\ 디렉터리로 이동해야 모듈을 읽을 수 있다.
- if __name__ == "__main__" 의미
# mod1.py
def add(a, b):
return a+b
def sub(a, b):
return a-b
if __name__ == "__main__":
print(add(1, 4))
print(sub(4, 2))
if __name__ == "__main__"을 사용하면 C:\>python mod1.py처럼 직접 이 파일을 실행했을 때는 __name__ == "__main__"이 참이 되어 if문 다음 문장이 수행된다. 반대로 대화형 인터프리터나 다른 파일에서 이 모듈을 불러서 사용할 때는 __name__ == "__main__"이 거짓이 되어 if문 다음 문장이 수행되지 않는다.
- 모듈에 있는 변수 클래스 사용
#mod2.py 작성
PI = 3.141592
class Math:
def solv(self, r):
return PI * (r ** 2)
def add(a, b):
return a+b
모듈 안에 있는 변수 및 클래스를 사용하려면 "."(도트 연산자)로 클래스 이름 앞에 모듈 이름을 먼저 입력해야 한다.
>>> import mod2
>>> print(mod2.PI)
3.141592
>>> a = mod2.Math()
>>> print(a.solv(2))
12.566368
- 다른 파일에서 모듈 불러오기 : 동일한 디렉토리에 있는 서로 다른 파일은 "import 모듈이름"으로 다른 파일의 모듈을 불러와 사용할 수 있다.
패키지
- 정의 : 패키지(Packages)는 도트(.)를 사용하여 파이썬 모듈을 계층적(디렉터리 구조)으로 관리할 수 있게 해준다. 예를 들어 모듈 이름이 A.B인 경우에 A는 패키지 이름이 되고 B는 "A 패키지의 B모듈"이 된다.
- 패키지 만들기
1. C:/디렉터리 밑에 game 및 기타 서브 디렉터리를 생성
C:/game/__init__.py
C:/game/sound/__init__.py
C:/game/sound/echo.py
C:/game/graphic/__init__.py
C:/game/graphic/render.py
2. 각 디렉터리에 __init__.py 파일을 만들어 놓기만 하고 내용은 일단 비워 둔다.
3. echo.py 파일은 다음과 같이 작성.
# echo.py
def echo_test():
print ("echo")
4. render.py 파일은 다음과 같이 작성
# render.py
def render_test():
print ("render")
5. game 패키지를 참조할 수 있도록 명령 프롬프트 창에서 set 명령어로 PYTHONPATH 환경 변수에 C:/ 디렉터리를 추가
C:\> set PYTHONPATH=C:/
C:\> python
Type "help", "copyright", "credits" or "license" for more information.
>>>
- 패키지 안의 함수 실행
1. echo_test 함수를 실행
# echo 모듈을 import하여 실행
>>> import game.sound.echo
>>> game.sound.echo.echo_test()
echo
# echo 모듈이 있는 디렉터리까지를 from ... import하여 실행
>>> from game.sound import echo
>>> echo.echo_test()
echo
# echo 모듈의 echo_test 함수를 직접 import하여 실행
>>> from game.sound.echo import echo_test
>>> echo_test()
echo
2. import game을 수행하면 game 디렉터리의 모듈 또는 game 디렉터리의 __init__.py에 정의한 것만 참조
>>> import game
>>> game.sound.echo.echo_test()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'sound'
3. 도트 연산자(.)를 사용해서 import a.b.c처럼 import할 때 가장 마지막 항목인 c는 반드시 모듈 또는 패키지여야만 한다.
>>> import game.sound.echo.echo_test
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named echo_test
- __init__.py : __init__.py 파일은 해당 디렉터리가 패키지의 일부임을 알려주는 역할을 한다.
'Python > python' 카테고리의 다른 글
파이썬 기본 문법 (0) | 2020.07.12 |
---|---|
파이썬 기본 문법 4 : 예외처리 (0) | 2020.03.16 |
파이썬 기본 문법 2 : 제어문, 함수, 입출력 (0) | 2020.03.16 |
파이썬 기본 문법 1 : 자료형 (0) | 2020.03.16 |