클래스
- 객체를 만들기 위한 틀, 클래스 자체도 객체이다
1 | # 클래스 예시 |
__init__(self)
: 생성자의 역할, 클래스에 필수로 정의되야 한다self
: 클래스 자신을 카리킨다
특징
- 파이썬에서 private로 변수를 지정하려면,
__변수명
식으로 선언하면 된다.- 하지만 이 변수에 외부에서 접근이 불가능하지 않다. private로 선언한 변수는 클래스 내부에
__클래스명__변수명
으로 저장되는데, 이것을 네임 맹글링이라고 한다. _변수명
은 protected 지정자이다. 하지만 이것은 파이썬 사용자들간의 약속일 뿐 아무런 접근 제한도 존재하지 않는다.
- 하지만 이 변수에 외부에서 접근이 불가능하지 않다. private로 선언한 변수는 클래스 내부에
Getter, Setter
- getter, setter는 다른 언어처럼 따로 작성하지 않는다
getter
데코레이터인
@property
를 이용해 작성한다.1
2
3
4#getter 예시
def name(self):
return self.name
이렇게 하면
인스턴스.변수명
으로 함수 호출이 아닌 표현식 처럼 사용이 가능하다.이렇게 사용하는 이유는, 외부에서 클래스 변수에 접근하여 변경하는 것을 막기 위해서이다
Setter
- getter를 먼저 생성해야 만들 수 있다
1 |
|
- 이렇게 만드는 이유는 , setter를 만들 때 입력 조건 형성이 가능하게 된다.
Method
Instance method
첫번째 인자로
self
를 가진다인스턴스를 이용해 호출
1
2
3
4
5
6class Gen:
def __init__(self):
self.number = 0
# 인스턴스 매서드
def plus_number(self):
self.number += 1
Class method
첫번째 인자로
cls
를 가진다cls
는 클래스 자체를 의미한다클래스 매서드는 클래스 속성에 대해 동작한다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16class Gen:
description : '++number++'
def __init__(self):
self.number = 0
# 인스턴스 매서드
def plus_number(self):
self.number += 1
#클래스 매서드는 @classmethod 데코레이터를 사용한다
#Gen의 클래스 속성인 description을 출력한다
def print_desc(cls):
print(cls.description)
#사용 예시, 클래스 자체를 사용
Gen.print_desc()
Static method
클래스 내부에 정의된 일반 함수이다
클래스나 인스턴스를 통해 접근 가능
클래스나 인스턴스에 영향을 줄 수 없다
1
2
3
4
5
6
7
8
9
10
11
12
13import random
class Gen:
description : '++number++'
def __init__(self, number):
self.number = number
# 정적 매서드는 @staticmethod 데코레이터를 사용한다
# 1 - 100 범위의 임의의 수로 Gen 클래스의 인스턴스를 생성
def plus_gen(self):
return Gen(random.randint(1, 100)
상속
- 부모 클래스의 기능들을 사용할 수 있게 한다
- 같은 이름의 내부 함수를 오버라이딩 할 수 있다
super()
를 사용하면 부모 클래스의 함수를 사용할 수 있다
동적 바인딩
- 타입을 신경쓰지 않고 인스턴스를 사용 가능하게 한다
1 | class Dog: |
- 위에서 animal_sound() 함수는 여러 역할을 할 수 있다, Dog 클래스의 bark()를 실행할 수도 있고 Cat 클래스의 bark()를 실행할 수도 있다. 이것을 다형성 이라고 한다.
- 또, 이 함수에서는, 인자에 Dog, Cat중 어떤 클래스가 들어가더라도 클래스의 bark()를 제대로 실행하게 된다
- 즉, 동적으로 바인딩할 때, 인자의 타입에 영향을 받지 않고, 오직 객체가 해당 속성을 가졌는지만 검사한다.
- 위의 예시에서는 인자가 bark() 메서드를 가졌는지만 검사한다.