SOCO

클래스(객체, 메서드, 생성자, 상속, 메서드 오버라이딩, 클래스변수), 모듈, 패키지, 라이브러리 본문

백/python

클래스(객체, 메서드, 생성자, 상속, 메서드 오버라이딩, 클래스변수), 모듈, 패키지, 라이브러리

ssooda 2021. 7. 9. 18:55

클래스

과자 틀 : 똑같은 무엇인가를 계속해서 만들어낼 수 있는 설계도면 -> 클래스 (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