일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- cURL
- 신경망
- auto-encoder
- 미분 방정식
- 파이썬
- 소행성
- Asteroid RL
- 강화학습
- 2P1L
- 딥러닝
- 이진탐색트리
- 계단 오르기
- BST
- 델
- 선적분
- 코드업
- 자료형
- java
- dictionary
- 피보나치 수열
- 백트래킹
- 회로이론
- 벡터해석
- Python
- 딕셔너리
- Class
- 벡터 해석
- 자바
- 함수
- 최단 경로
- Today
- Total
Zeta Oph's Study
[Python 기초 문법] 클래스 (Class) (2) 본문
https://crane206265.tistory.com/67?category=1080494
[Python 기초 문법] 클래스 (Class) (1)
클래스(Class), 객체(Object) 객체(Object) : 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서, 자신의 속성을 가지고 있고, 다른 것과 식별 가능한 것. - (그냥 내가 이해한거) : 코딩에서
crane206265.tistory.com
클래스 이전 글
클래스 상속 (Class Inheritance)
B 클래스를 선언할 때 A 클래스를 상속 받는다 : A 클래스의 메서드들을 모두 그대로 가져온다.
클래스 선언 시에
class Class_Name(Inheritance_Class_Name):
...
와 같이 () 안에 상속할 클래스 이름을 넣어주면 된다.
상속은 기존 클래스가 라이브러리 형식으로 제공되거나 수정이 불가능할 때 유용하게 쓰인다.
상속받은 클래스에 있는 함수를 "덮어쓰는 것"을 메서드 오버라이딩(method overriding)이라고 한다. 즉, 상속 받은 클래스에 같은 이름의 함수가 있더라도 무시하고 메서드를 다시 선언하면 새로 선언한 것이 적용된다.
상속할 클래스의 메서드에 접근하기 위해서 super()를 사용한다. super()로 접근하면 자식 클래스에 같은 이름의 함수가 있어도 부모 클래스의 것이 실행된다.
class A():
def __init__(self):
self.var_a = 3
def f1(self, var):
print("(Class A) "+str(var))
class B(A):
def __init__(self):
self.var_b = 5
def f1(self):
print("(Class B) "+str(self.var_b))
def test(self):
super().f1(self.var_b)
super().__init__()
print(self.var_a)
cl = B()
cl.test()
cl.f1()
TERMINAL
(Class A) 5
3
(Class B) 5
super() 를 통해 호출한 함수는 부모 클래스의 메서드인 것을 확인할 수 있고, 부모 클래스의 변수를 접근할 때에는 super()가 아닌 self로 접근할 수 있다. 이때 자식 클래스와 부모 클래스에 동일한 이름의 변수가 있다면 마지막에 업데이트 된 것으로 호출된다.
괄호 안에 쉼표(,)로 구분하여 적어주면 다중 상속도 가능하다.
__new__
클래스 1편에서 __init__() 은 객체 생성 시 가장 먼저 호출되는 함수라고 했지만, 사실 __new__() 가 가장 먼저 호출된다.
객체 생성 호출 --> __new__ 호출하여 객체를 생성 할당
--> __new__의 반환값은 그 클래스의 인스턴스가 되어 __init__ 호출하여 객체 초기화
이러한 순서로 호출되는데, 이 때문에 __new__ 함수에서 인스턴스를 반환하지 않는다면 객체가 아예 생성되지 않는다.
class A():
def __new__(cls):
print("__new__")
return super().__new__(cls)
def __init__(self):
print("__init__")
return super().__init__()
cl = A()
TERMINAL
__new__
__init__
return super().__new__(cls)
이 부분이 __init__을 호출하는 부분이다. 만약 return -1 같이 다른 것을 반환한다면, 객체 자체가 생성되지 않는다.
비공개 속성
.을 통해 객체의 변수나 메서드를 호출할 수 있었다. 이때 변수/메서드 이름 앞에 __ (더블 언더바)를 붙여주면 외부에서의 접근을 막을 수 있다. 즉, 클래스 안에서만 호출 가능하다.
class A():
def __f(self):
print("wow")
def f(self):
print("asdf")
self.__f()
cl = A()
cl.f()
cl.__f()
TERMINAL
asdf
wow
AttributeError: 'A' object has no attribute '__f'
클래스.. 이거 말고 더 자세한 것도 많이 있지만, 학인시가 급하므로 나중에 다뤄보죠..
'프로그래밍 > Python' 카테고리의 다른 글
[Python 라이브러리] csv 모듈 (1) | 2024.03.04 |
---|---|
[Python 기초 문법] 텍스트 프로세싱 (1) | 2024.03.04 |
[Python 기초 문법] 클래스 (Class) (1) (2) | 2024.03.03 |
[Python 기초 문법] 사전 (Dictionary) (1) | 2024.03.03 |
[Python 기초 문법] 집합 (Set) (1) | 2024.03.02 |