Coding/언어-Python

[점프투] #4. 5장 클래스와 객체

꿀딴지- 2022. 8. 31. 15:15

https://wikidocs.net/28

파이썬에서는 항상 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'
  • 호출가능한 모듈 경로 설정하기
  1. sys.path에 모듈경로 추가하기
  2. 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