SOCO
클래스(객체, 메서드, 생성자, 상속, 메서드 오버라이딩, 클래스변수), 모듈, 패키지, 라이브러리 본문
클래스
과자 틀 : 똑같은 무엇인가를 계속해서 만들어낼 수 있는 설계도면 -> 클래스 (Cookie)
과자 틀에 의해서 만들어지는 과자 : 설계도면으로 만든 피조물 -> 객체이자 클래스의 인스턴스 (a)
객체와 인스턴스의 차이
a는 객체,
a는 Cookie의 인스턴스
클래스 안에 구현된 함수 -> 메서드
함수와 매서드의 차이
일반적인 함수
def function_name(parameter) :
sentence
function_name(argument)
메서드
class Class_name :
def method_name1(self, parameter) :
self.parameter = parameter
object_name = Class_name() #객체 생성
#호출방법1 : 객체로 호출하는 방법 => self에는 자동으로 메서드를 호출한 객체가 전달됨
object_name.method_name(argument)
#호출방법2 : 클래스로 바로 호출하는 방법 => 객체를 매개변수 self에 꼭 전달해줘야함
Class_name.method_name(object_name, argument)
생성자 : 별도의 메서드를 호출하여 초기값을 설정하기 보다는 생성자를 구현하는 것이 안전하다
=> 파이썬 메서드 이름으로 __init__을 사용하면 이 메서드는 생성자가 된다
class Class_name :
def __init__(self, parameter1, parameter2) : #메서드의 이름이 __init__인 경우 -> 생성자임
self.parameter1 = parameter1
self.parameter2 = parameter2
a = Class_name(argument1, argument2) #객체 생성
#self => 생성되는 객체
#parameter1 = argument1
#parameter2 = argument2
상속 : 부모클래스에 있는 메서드를 사용할 수 있음
class Class_name2(Class_name) : #Class_name2가 Class_name을 상속함
pass
메서드 오버라이딩 : 부모클래스에 있는 메서드와 동일한 메서드를 정의하는 경우, 해당 메서드 호출 시 부모클래서의 메서드 대신 오바라이딩한 메서드가 호출된다
클래스변수 : 객체 생성시 전달되는 매개변수가 아니라 클래스 전체에서 선언된 변수
객체내에 있는 매개변수는 각 개체마다 다른 반면, 클래스변수는 각 객체 모두 동일함
class Class_name :
variable_name = class_variable
def __init__(self, parameter1, parameter2) :
self.parameter1 = parameter1
self.parameter2 = parameter2
a = Class_name(1,2)
b = Class_name(3,4)
print(a.parameter1) #1
print(a.parameter2) #2
print(a.variable_name) #class_variable
print(b.parameter1) #3
print(b.parameter2) #4
print(b.variable_name) #class_variable
모듈
모듈이란 함수나 변수 또는 클래스를 모아 놓은 파일
#방법1
import module_name
module_name.class_name.method_name()
#방법2
from module_name import class_name
class_name.method_name()
#방법3
from module_name import *
class_name.method_name()
참고 __name__
if __name__ == "__main__" :
__name__변수는 파이썬이 내부적으로 사용하는 특별한 변수 이름이다.
해당 파일에서 직접 실행하는 겨우 __name__변수에 __main__이라는 값이 저장된다
패키지
패키지는 도트(.)를 사용하여 파이썬 모듈을 계층적(디렉터리 구조)으로 관리할 수 있게 해준다.
모듈이름이 A.B인 경우 A패키지의 B모듈을 의미한다.
game이라는 디렉터리 밑에 sound,graphic,play 디렉터리가 존재한다
game디렉토리에 있는 하위 폴더, 파일을 살펴보면 다음과 같다.
game>__init__.py
game>sound>__init__.py
game>sound>echo.py
game>sound>wav.py
game>graphic>__init__.py
game>graphic>screen.py
game>graphic>render.py
game>play>__init__.py
game>play>run.py
game>test>test.py
이 경우 game>sound>echo.py 파일에 echo_test함수가 선언되어있다면(def)
어떻게 해당 echo_test를 사용할 수 있을까
옳은 방법
#방법1
import game.sound.echo
game.sound.echo.echo_test()
#방법2
from game.sound import echo
echo.echo_test()
#방법3
from game.sound.echo import echo_test
echo_test()
잘못된 방법
#잘못된 방법1
import game
game.sound.echo.echo_test()
#잘못된 방법2
import game.sound.echo.echo_test
import game을 하는 경우 game디렉터리의 __init__.py에서 정의한 것만 참조할 수 있다
import를 하는 경우 가장 마지막 항목은 모듈 또는 패키지여야 한다
__init__.py 파일의 경우 해당 디렉터리가 패키지의 일부임을 알려주는 역할을 한다.
python3.3부터는 __init__.py파일이 없어도 패키지로 인식이 가능하지만 하위버전과의 호환을 위해 파일을 생성하는 것이 바람직하다
cf. __init__함수와 __init__.py파일은 다르다!
라이브러리
여러 모듈과 패키지를 묶어 라이브러리라고 한다
클래스는 함수, 변수를 포함
모듈은 클래스와 함수, 변수를 포함 (파일)
패키지는 모듈을 포함 (폴더)
라이브러리는 패키지, 모듈을 포함
'백 > python' 카테고리의 다른 글
vscode 터미널에서 바로 개발환경 설정하기 (0) | 2021.07.11 |
---|---|
클래스 응용 (0) | 2021.07.09 |
파이썬 가상환경 파이썬 가상머신 (0) | 2021.07.09 |
라이브러리 사용방법 (0) | 2021.07.08 |
자료형이 정수인지 확인하기 (0) | 2021.07.06 |