파이썬만 지금 거의 6~7년째 접하고 있지만 잘 안쓰는 것들은 잘 까먹게 되는 것 같다. 이번에 한번 더 복습해보고자 한다.
파이썬은 객체 생성 전에 미리 Class를 선언해야 한다.
class Quardrangle :
pass #pass : 임시코드 작성할때 사용하는 문법, 아무것도 수행하지 않음
클래스에 아직 어떠한 attribute도 넣어준 상태가 아니기 때문에 pass를 넣어서 선언이 끝났다고 알려주자
dir(Quardrangle)
dir 를 쓰게 되면, 클래스의 네임스페이스에 등록되어 있는 이름들을 리스트로 반환해주는 내장함수다.
네임 스페이스는 변수명, 함수명, 클래스 명을 언어차원에서 관리하는 매커니즘이라고 보면 된다.
클래스에는 기존의 네임스페이스에 등록된 것에 추가로 변수(attribute), 함수(method), 클래스 등을 선언할 수 있다.
class Quadrangle :
width = 0
height = 0
color = "black"
def get_area(self):
return self.width * self.height
여기서 클래스의 method의 첫번째 인자는 항상 self를 넣어줘야 한다. 추가적인 인자가 없다고 하더라도 self를 꼭 넣어줘야 한다.
클래스의 attribute에 접근하려고 하면 self.attribute 로 접근할 수 있다.
# 클래스 인스턴스를 만드는 방법
#변수명 = 클래스명()
square = Quadrangle()
# 클래스를 상솝받는 방법
# class 클래스명(상속할 클래스이름)
class Quadrangle_boy(Quadrangle):
pass
클래스를 인스턴스로 선언할 수도 있고 자식 클래스로 상속받을 수 있다.
선언과 상속의 큰 차이점은 선언은 클래스 구조를 편할대로 못 바꾸는 것이지만 상속은 부모 클래스에서 내가 원하는 부분을 지우거나 추가할 수 있다(class overiding)
클래스를 보다보면 __init__을 많이 볼 수 있는데,
__init__은 초기화를 해주는 것으로 클래스 인스턴스를 선언했을 때 기본값으로 초기화 해주는 메소드로 사용된다.
다른 객체들에 영향을 받지 않고 독립적인 값을 유지하곤 한다.
class Node:
def __init__(self,data):
self.data = data
self.next = None
또 보다보면 _ 에 대해서 궁금증이 생길것이다.
_ 는 언더스코어라는 친구로
- _가 독립적으로 사용될 경우 : 인터프리터에서 마지막 실행 결과 값을 가지는 변수
- __이름__ : 내장된 특수한 함수와 변수를 나타냄
- _함수명 : 다른 파일을 import 할때, _를 붙인 함수는 가져오지 않을 것임 : 약한 private 기능
- __변수명 : 선언된 클래스 안에서만 해당 이름으로 사용 가능한 것. 외부에서 이 변수에 접근하려면 _클래스명__변수명 으로 접근 가능하다.(맹글링이라고 한다)