일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 강의정리
- 파이썬
- rnn
- tensorflow
- BAEKJOON
- loss
- DynamicProgramming
- 정렬
- 자연어처리
- Softmax
- Cross entropy
- DP
- 홍콩과기대김성훈교수
- 스택
- 파이토치
- machine learning
- 강의자료
- 머신러닝
- AI
- classifier
- 딥러닝
- Hypothesis
- 백준
- Natural Language Processing with PyTorch
- 머신러닝 기초
- MSE
- Python
- Deep learning
- 알고리즘
- pytorch
- Today
- Total
개발자의시작
파이썬 클래스(class) 이해하기 2 본문
이 글은 클래스 상속에 대해 정리한 글입니다.
상속이란 부모 클래스(super class)의 모든 속성(데이터, 메서드)을 자식 클래스(sub class)로 물려줄 수 있는 클래스의 기능 중 하나입니다. 이러한 상속을 사용하는 이유는 각 클래스에서는 클래스마다 특화된 메서드와 데이터를 정의할 수 있고, 클래스마다 동일한 코드가 작성되는 것을 방지하며 부모 클래스에 공통된 속성을 두어 코드의 유지보수가 쉬워지기 때문입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class Person:
def __init__(self):
self.name="홍길동"
self.age=25
class Korean(Person):
pass
p1=Person()
print(p1.name, p1.age)
k1=Korean()
print(k1.name, k1.age)
|
위 코드는 Korean 클래스가 Person클래스를 부모 클래스로 갖는 예이다. Korean클래스는 Person클래스로부터 상속을 받아 k1.name, k1.age는 각각 "홍길동"과 25를 출력한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class Person:
def __init__(self):
self.name="홍길동"
self.age=25
class Korean(Person):
def __init__(self):
super().__init__()
self.lang="한국어"
p1=Person()
print(p1.name, p1.age)
k1=Korean()
print(k1.name, k1.age, k1.lang)
|
Korean 클래스에서 다시 한 번 초기자를 정의할 수 있다. super() 함수는 부모 클래스를 나타낸다. 즉 Korean 클래스는 부모 클래스인 Person클래스로부터 상속받아( super.__init__() ) name과 age를 변수로 갖고 self.lang을 정의해 자기 자신만의 속성을 갖는다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
class Person:
def __init__(self):
self.name="홍길동"
self.age=25
def say(self):
pass
class Korean(Person):
def __init__(self):
super().__init__()
self.lang="한국어"
def say(self):
print("안녕하세요")
class American(Person):
def __init__(self):
super().__init__()
self.lang="영어"
def say(self):
print("Hello")
p1=Person()
print(p1.name, p1.age)
k1=Korean()
print(k1.name, k1.age, k1.lang)
a1=American()
print(a1.name, a1.age, a1.lang)
|
위 예는 하나의 부모클래스(Person)를 갖는 두 개의 자식 클래스(Korean, American)가 있다. 부모 클래스는 say 메서드를 갖는다. 두 자식 클래스 모두 메서드 say를 갖는데, 출력 결과를 보면 각각 "안녕하세요"와 "Hello"를 출력 한다. 부모 클래스가 같은 이름의 메서드를 갖고 있더라도, 자식도 같은 메서드를 갖고 있는 경우 본인의 메서드를 우선적으로 수행한다. 이를 재정의(overriding)라 하며 객체지향 프로그래밍의 다형성에 해당한다.
인스턴스 변수 VS 클래스 변수
※인스턴스 변수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class Person:
def __init__(self.sp):
self.li=[]
self.li.append(sp)
def disp(self):
print(self.li)
p1=Person("우유")
p1.disp()
p2=Person("콜라")
p2.disp()
p3=Person("사이다")
p3.disp()
|
위의 예는 p1, p2, p3에 인스턴스화 한 것이다. 이 경우 self를 사용하여 각각의 인스턴스가 각각 리스트를 갖는다. 코드 실행결과는 p1은 ["우유"], p2는 ["콜라"], p3은 ["사이다"]를 갖는다.
※클래스 변수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class Person:
li=[]
def __init__(self.sp):
Person.li.append(sp)
def disp(self):
print(Person.li)
p1=Person("우유")
p1.disp()
p2=Person("콜라")
p2.disp()
p3=Person("사이다")
p3.disp()
|
클래스 변수는 각각의 객체들이 공유하는 것이다. 따라서 인스턴스 변수와 다르게 하나의 리스트를 갖기 때문에 출력결과는 ["우유"], ["우유", "콜라" ], ["우유", "콜라","사이다" ]를 나타낸다.
'프로그램언어 > python' 카테고리의 다른 글
파이썬(python) 메모리 관리 2 (0) | 2021.04.30 |
---|---|
파이썬(python) 메모리 관리 1 (0) | 2021.04.30 |
파이썬 클래스(class) 이해하기 1 (0) | 2020.06.17 |