히비스서커스의 블로그

[Python] 파이썬 클래스, 모듈 본문

Programming/Python

[Python] 파이썬 클래스, 모듈

HibisCircus 2021. 1. 28. 19:31
728x90

오늘 오전 Fundermental 노드와 오후에 풀잎스쿨을 하며 모두 클래스와 모듈에 관한 이야기가 나왔고, 저녁에 Exploration 노드를 하며 코드에도 사용되었기에 개념을 한 번 정리해두어야 겠다는 생각이 들었다.

 

이미지 출처 : (https://opentutorials.org/course/3108/19309)

클래스 (주로 PascalCase 컨벤션으로 클래스명을 작성 )

 

클래스는 프로그래밍으로 객체(=특정대상)을 찍어내기 위한 일종의 틀이다.

여러 개의 함수들이 클래스 안에서 정의될 수 있고 클래스에서 불러올 수 있다.

주의: 물론 함수 안에도 함수를 정의할 수 있지만, 함수 안의 함수는 소속된 함수 안에서 밖에 쓰이질 못한다.

 

 

클래스 안에는 데이터와 같은 속성(주로 변수)과 기능과 같은 메소드(주로 함수)가 존재한다.

하지만 클래스는 특정 개념만 표현할 뿐이고 인스턴스를 생성하여 객체로 만들어주어야 사용할 수 있다.

변수 = 클래스명()
# 여기서 변수는 인스턴스가 되고 이 과정을 인스턴스화라고 한다

 

클래스 안의 속성과 메소드를 호출할 경우 사용법은 아래와 같다.

# 속성 사용법
인스턴스.속성  # 인스턴스는 클래스를 객체화시킨 변수, 속성은 클래스 안의 변수

# 메서드 사용법
인스턴스.메소드()  # 메서드는 클래스 안의 함수

 

클래스에서는 크게 2가지 속성(변수)이 있는데

1. 클래스 변수: 클래스 안에 속성을 정의하는 방법과 (클래스를 인스턴스화할 때마다 호출가능)

2. 인스턴스 변수: __init__ 메서드 안에서 self. 속성에 값을 할당하는 방법이 존재한다. (처음 인스턴스에만 호출가능)

 

또한,메소드를 정의할 때는 괄호 안에 self 인자를 넣어주어야 한다.

class 클래스명:

    클래스변수 = 값1  # 인스턴스화 할 때 마다 호출 가능

    def __init__(self):
        self.인스턴스변수 = 값2  # 첫 인스턴스 객체에서만 호출 가능

    def 메소드명(self):
        print("self인자를 지정해주세요.")

__init__ 메소드는 인스턴스를 만들 때 호출되는 메소드로 인스턴스를 초기화한다.

이와 같이 파이썬이 자동으로 호출해주는 메서드를 매직 메소드라 한다.

(__name__, __loader__,__package__,__spec__,__path__,__file__ 등이 존재한다.)

 

 

클래스에서 중요한 부분이 또 하나 있는데 바로 상속이라는 개념이다.

단어의 의미에서 느껴지겠지만 원래 클래스의 기능을 그대로 이어받아 사용하는 클래스이다.

이때, 원래 클래스는 부모 클래스라 하고, 그대로 이어받아 사용하는 클래스는 자식 클래스라 한다.

 

 

클래스 상속에서는 3가지 개념 정도 알아두면 좋다.

 

1. 메소드 추가 :: add

- 부모 메소드에 없던 메소드를 추가하여 정의하는 것

 

2. 메소드 재정의 :: override 

- 부모 메소드에 있던 메소드를 변경하여 정의하는 것

 

3. 부모 메소드 호출 :: super()

- 부모 클래스에 __init__ 메소드로 정의한 후 부모 클래스를 호출하지 않고 자식 클래스를 호출할 때 자식 클래스에서 __init__ 메소드를 사용했을 경우 __init__.super() 사용해야 한다.

 

# 부모 클래스
class First:
    def __init__(self):
        self.go = 'go'


# 자식 클래스 1
class SecondOne(First):
    def __init__(self):
        super().__init__()  # 부모 클래스에서 __init__ 메소드를 정의하고 자식 클래스에서도 정의하였으므로
        self.back = 'back'
        

# 자식 클래스 2
class SecondTwo(First):
    pass


test1 = SecondOne()
print(test1.go)

test2 = SecondTwo()
print(test2.go)

 

 

 

 

모듈 (주로 snake_case 컨벤션으로 모듈명을 작성 => 이는 함수명을 작성할 때도 적용된다.)

 

모듈은 함수, 변수, 클래스를 모아 놓은 파일이다.

모듈이 존재하는 디렉토리 안에서 파이썬 파일을 코딩 중이라면

import 모듈명  # 즉, import 파일명.py

 

과 같이 모듈을 불러올 수 있고, 모듈 안의 함수를 사용할 경우에는

모듈명.함수명()

과 같이 사용할 수 있다.

 

 

위에서 배운 매직메소드 __name__ 를 통해서 모듈이 직접 실행될 때와 import 될 때를 구분할 수 있다.

# 파일명을 test.py라고 하겠습니다.

def plus(a, b):
    return a+b
    
if __name__ == '__main__':  # 파일이 직접 실행될 때만 실행하게 됩니다.
    a = input('첫번째 더할 숫자 입력: ')
    b = input('두번째 더할 숫자 입력: ')
    print(f'합은 {plus(a,b)}')

 

그 이유는 __name__ 은 모듈 이름을 나타내는 변수인데

파일이 직접 실행될 때 변수 __name__은 '__main__'이 되어 if문이 실행된다.

파일이 import될 때 변수 __name__은 원래의 파일 이름인 test.py이 되어 if문이 실행되지 않는다.

 

 

 

 

혹시나 잘못된 내용이 있다면 댓글을 부탁드립니다.

 

참고한 내용은 다음과 같습니다. (내용은 저의 말로 풀었습니다.)

dojang.io/

 

코딩 도장

 

dojang.io

Unit34. 클래스 사용하기

Unit36. 클래스 상속 사용하기

Bohyoh Shibata,자료구조와 함께 배우는 알고리즘 입문 파이썬 편, 이지스퍼블리싱(2020),  p77

 

 

 

 

- 히비스서커스 -

 

728x90