파이썬에서는 항상 def(함수)로 사용하였는데 '클래스'라는 개념이 동일하게 있고 추후 클로저 등 파이썬 고유 문법을 위해서는 짚고 가야할 부분
05-1 클래스
- 클래스와 객체 : 동일한 클래스로 만든 객체는 서로 전혀 영향을 주지 않는다
- 인스턴스 : 클래스로 만든 객체
- a = Cookie() 이렇게 만든 a는 객체, a 객체는 Cookie의 인스턴스.
- 즉 인스턴스라는 말은 특정 객체(a)가 어떤 클래스(Cookie)의 객체인지를 관계 위주로 설명할 때 사용 - 매서드 : 클래스 안에 구현된 함수
- 메서드 호출하는 방법
.클래스 이름.메서드
형태로 호출할 때는 객체 a를 첫 번째 매개변수 self에 꼭 전달해 주어야 한다.
.객체.메서드
형태로 호출할 때는 self를 반드시 생략해서 호출 - 생성자(Constructor)
- 객체가 생성될 때 자동으로 호출되는 메서드
- def __init__(인자) - 클래스의 상속
- 기존클래스를 변경하지 않고 기능을 추가하거나 기존기능을 변경하려고 할때 사용
- class 클래스이름(상속할 클래스이름)
- 메서드 오버라이딩(덮어쓰기) : 부모클래스에 있는 메서드를 동일한 이름으로 다시 만드는 것 - 객체변수와 클래스변수
- 객체변수 : 다른 객체에 영향받지 않고 객체생성 시 만들어진 변수
- 클래스 변수 : 클래스 안에 선언된 변수, 클래스로 만든 모든 객체에 공유됨. 클래스이름.클래스 변수
class Family :
lastname = "김"
print(Family.lastname) #클래스 변수
a = Family()
b = Family()
print(a.lastname) #객체를 통한 클래스 변수 사용
Family.lastname = "박" #클래스 변수 변경
print(a.lastnmae) #'박'
a.lastnmae = "최" #객체변수가 바뀜
print(b.lastnmae) #'박' 클래스변수는 변함없음
05-2 모듈
- 함수, 변수, 클래스를 모아놓은 파일
- 파이썬 확장자 .py로 만든 파이썬 파일은 모두 모듈이다
- 도트연산자로 import할 때 가장 마지막 항목은 반드시 모듈 또는 패키지(함수X)
import 모듈이름 # 모듈이름.함수이름()
import 모듈이름 as 별명
from 모듈이름 import 모듈함수 #함수이름()
from 모듈이름 import *
- if __name__ == "__main__"
- 직접 이 파일을 실행했을 때는 __name__ == "__main__" 참이 되어 if문 다음 문장이 수행된다.
- 대화형 인터프리터나 다른 파일에서 모듈을 불러서 사용할 때는 __name__ == "__main__" 이 거짓이 되어 if문 다음 문장이 수행되지 않는다.
- __name__ 변수란?
- 파이썬이 내부적으로 사용하는 특별한 변수 이름
- 만약 C:\\doit>python mod1.py처럼 직접 mod1.py 파일을 실행할 경우 mod1.py의 __name__ 변수에는 __main__ 값이 저장된다.
- 파이썬 셸이나 다른 파이썬 모듈에서 mod1을 import 할 경우에는 mod1.py의 __name__ 변수에는 mod1.py의 모듈 이름 값 mod1이 저장된다.
import mod1 print(mod1.__name__) # 'mod1'
- 호출가능한 모듈 경로 설정하기
- sys.path에 모듈경로 추가하기
- pythonpath 환경변수 사용하기
import sys
print(sys.path) #파이썬 라이브러리가 설치되어 있는 디렉터리를 보여줌
sys,path.append("경로") #모듈 경로를 sys.path 에 추가
set PYTHONPATH=C:\\doit\\mymod # pythonpath 환경변수 사용
05-3 패키지
- 도트(.)를 사용하여 파이썬 모듈을 계층적(디렉터리 구조)으로 관리
- 모듈은 하나의 .py파일
모듈 불러오는 방법(game > sound > echo > echo_test() )
import game.sound.echo
game.sound.echo.echo_test()
from game.sound import echo
echo.echo_test()
from game.sound.echo import echo_test
echo_test()
import game
game.sound.echo.echo_test() ## ERROR!!
## game 디렉터리의 __init__.py에 정의한 것만 참조
import game.sound.echo.echo_test ## ERROR!!
## 도트 연산자(.)를 사용해서 import a.b.c처럼 import할 때 가장 마지막 항목인 c는 반드시 모듈 또는 패키지
- init.py 용도 : 해당 디렉터리가 패키지의 일부임을 알려주는 역할
- python3.3 버전부터는 __init__.py 파일이 없어도 패키지로 인식
- all 사용처 :
from a.b.c import * 에서
1) from의 마지막 항목인 c가 모듈인 경우 __all__ 과 상관없이 무조건 import
2) c가 패키지(디렉토리)인 경우 해당 디렉터리의 __init__.py파일에 __all__ 변수를 설정하고 import할 수 있는 모듈을 정의
from game.sound.echo import * # 케이스1) from game.sound import * # 케이스 2)
# C:/doit/game/sound/__init__.py __all__ = ['echo'] ## sound 디렉터리에서 * 기호를 사용하여 import할 경우 이곳에 정의된 echo 모듈만 import된다는 의미
'Coding > 언어-Python' 카테고리의 다른 글
[점프투] #3. 4장 함수 (0) | 2022.08.31 |
---|---|
[점프투] #2. 3장 제어문 (0) | 2022.08.31 |
[점프투] #1. 2장 자료형 (0) | 2022.08.31 |
[점프투] 점프투파이썬 intro (0) | 2022.08.31 |