class
class는 프로그래머가 지정한 이름으로 만든 하나의 독립된 공간이고, namespace라고 부른다.
클래스에 대한 또다른 설명은 다음과 같다.
함수뿐만 아니라 다양한 변수를 포함한 큰 프로그램을 하나의 묶음으로 정의하는 것이 "클래스(class)"이다.
class 왜 쓰는 걸까?
같은 데이터를 가지고 계속해서 연산의 결과를 저장하며 여러가지 함수를 묶어 처리해야 하는 경우가 있다. 예를들어 계산기를 구현한다고 할 때 계속해서 global변수로 연산결과를 받아서 다음 연산을 함수로 넘겨 진행해도 되지만, 이렇게 한다면 다른 계산기로 다른 연산을 하고 싶을 때는 같은 함수를 여러개 작성해야 하는 일이 생긴다. 그래서 우리는 class를 사용하고, 그 데이터 처리에 필요한 변수와 함수를 모두 하나로 모은다. 이게 바로 class이다.
class 이름:
클래스 멤버 정의
클래스 메소드 정의
class MyClass:
var = '안녕하세요'
def sayHello(self):
print(self.var)
obj = MyClass()
print(obj.var) # '안녕하세요' 출력
obj.sayHello() # '안녕하세요' 출력
클래스 멤버와 인스턴스 멤버 이해하기
- 클래스 멤버 : 클래스 내에서 선언되는 변수, 클래스 메소드 바깥에서 선언
- 인스턴스 멤버 : 클래스 메소드 안에서 self와 함게 선언되는 변수
인스턴스 변수는 따라서 클래스의 인스턴스 객체가 만들어질 때 자동으로 호출되는 클래스 생성자에서 선언하는 것이 일반적 = 다른 클래스 메소드 호출로도 생성 가능하지만 권장하지는 않는다
class MyClass:
var = '클래스 멤버'
def sayHello(self):
param1 = '지역변수' # 지역변수는 인스턴스 객체인 obj의 멤버로 참조 불가
self.param2 = '인스턴스 변수'
print(param1)
print(self.var)
obj = MyClass()
print(obj.var)
print(MyClass.var)
# print(obj.param1) # MyClass' object has no attribute 'param1'
# print(obj.param2) # MyClass' object has no attribute 'param2'
obj.sayHello()
# print(obj.param1) # MyClass' object has no attribute 'param1'
print(obj.param2) # 인스턴스 변수는 클래스 메소드 호출하고 나면 변수가 초기화 되어 오류 없이 사용 가능
클래스 메소드 이해하기
클래스 메소드 : 클래스 내에서 정의되는 함수
- 클래스 메소드의 첫 번째 인자는 반드시 self
-
class MyClass: var = 'hi' def sayHello(self): # self는 클래스의 인스턴스 객체를 지시하는 참조자 print("안녕하세요") def sayBye(self,name): # 인자가 필요하면 두 번째 인자부터 정의 print(f"{name}! 다음에 보자!") obj = MyClass() obj.sayHello() obj.sayBye('rabo')
클래스 생성자 이해하기
클래스 생성자 : 클래스의 인스턴스 객체가 생성될 떄 호출되는 함수
- 일반적으로 클래스의 인스턴스 멤버를 선언하거나 초기화와 관련된 작업은 클래스 생성자에서 처리
- def init(self, *args) 가변인자이기 떄문에 필요한만큼 인자를 받을 수 있음
class MyClass: def __init__(self): self.var = "hi" print('MyClass 인스턴스 객체가 생성되었습니다') obj = MyClass() print(obj.var) ----- MyClass 인스턴스 객체가 생성되었습니다 hi
class MyClass: def __init__(self, txt): self.var = txt print('생성자 인자로 전달받은 값은 <'+self.var+'> 입니다') obj = MyClass('철수') --- 생성자 인자로 전달받은 값은 <철수> 입니다
클래스 소멸자 이해하기
- 클래스 소멸자 : 클래스의 인스턴스 객체가 메모리에서 제거될 때 자동으로 호출되는 함수
- 클래스 소멸자는 인스턴스 객체에서 사용한 자원을 해제하기 위해 자동으로 호출
- del (self)
- 인스턴스 객체 제거 del<인스턴스 객체>
-
class MyClass: def __del__(self): print('MyClass 인스턴스 객체가 메모리에서 제거됩니다') obj = MyClass() del obj # "MyClass 인스턴스 객체가 메모리에서 제거됩니다"가 출력
클래스 상속 이해하기
클래스는 상속이라는 특성을 가지는 이름공간이다.
- 상속 : 부모 클래스의 모든 기능들을 자식클래스로 상속
-
상속이란 어떤 클래스가 가지고 있는 모든 멤버나 메소드를 상속받는 클래스가 모두 사용할 수 있도록 해주는 것 `class 자식클래스(부모클래스):`
- 상속해주는 클래스를 부모 클래스 or 슈퍼 클래스
- 상속받는 클래스를 자식 클래스 or 서브 클래스
- 다중상속 : 자식 클래스는 여러 개의 부모클래스로부터 상속받을 수 있음
- class 자식클래스(부모클래스1, 부모클래스2)
class Add:
def add(self, n1, n2):
return n1 + n2
class Multiply:
def multiply(self,n1,n2):
return n1*n2
class Calculator(Add, Multiply):
def sub(self, n1, n2):
return n1 - n2
obj = Calculator()
print(obj.add(1,2)) # 3
print(obj.sub(1,2)) # -1
print(obj.multiply(1,2)) # 2
'Python' 카테고리의 다른 글
[Python] keyword (0) | 2022.07.15 |
---|---|
[Python] __future__ (import __future__) (0) | 2022.07.13 |
[python] list앞에 붙은 * (unpacking) (0) | 2021.10.27 |
[python] python 파일내에 terminal 명령어 포함하는 방법 (0) | 2021.10.19 |
[python][basic] 파일 열고 닫기 (open, close) (0) | 2021.10.16 |