08-1 클래스의 기본
추상화: 객체 지향 프로그래밍에서 복잡한 시스템을 클래스와 메서드 등을 통해 간단한 모델로 표현하는 것
- 인터페이스 정의: 클래스의 구조를 정의하여 서브클래스에서 구현해야하는 메서드 명시
- 코드의 일관성 유지: 여러 서브 클래스가 동일한 인터페이스를 따르도록 함
- 재사용성 증가: 공통적인 기능을 상위 클래스에서 정의 후 세부적인 구현은 서브 클래스에서 처리
클래스: 객체의 속성과 메서드를 정의해주는 구조
인스턴스: 클래스에서 생성된 객체
- 클래스는 초기화를 통해 제어함
- 재사용성과 조직화에 용이해지고 코드의 복잡성을 줄임
클래스 선언
class 클래스 이름:
클래스 내용
객체(인스턴스) 생성
인스턴스 이름 = 클래스 이름() #생성자 함수
생성자
__new__를 호출하여 객체를 생성할당한 후 __new__ 메소드가 __init__메소드를 호출하여 초기화를 수행
파이썬에서 클래스를 생성 시 __init__만 오버라이딩하여 객체초기화에 사용
def __init__(self, value)
self는 '자기 자신'을 나타내는 딕셔너리. self가 가지고 있는 속성과 기능엔 self.<식별자>로 접근 (java의 this와 유사)
__init__에서 객체의 불변성을 확립하는 것이 좋다.
ex) str만을 이름으로 받아야되는 객체가 있으면
def __init(self,name):
if not name.isalpha():
raise ValueError("이름이 영문자가 아닙니다")
self._number = number
*위의 변수중에 self._number에서 언더바_가 들어가는 이유가 궁금해서 뒤에서 추가로 다뤄보았다.
메소드: 클래스가 가지고 있는 함수
def instance_method(self, value):
pass
인스턴스 메소드 - 인스턴스에 속하는 메소드. self를 통해 인스턴스에 접근
@classmethod
def class_method(cls):
pass
클래스 메소드 - cls키워드를 통해 클래스에 접근, @classmethod 데코레이터를 사용하여 정의
*파이썬은 메소드 오버로딩이 없다.
속성: 클래스 내부에 포함돼있는 메소드나 변수
인스턴스 속성: __init__ 메소드 내에서 self 키워드를 사용하여 정의되는 데이터
- self.속성명을 통해 접근
클래스 속성: 클래스 자체에 속하는 데이터. 모든 인스턴스가 클래스 속성을 공유
- 클래스명.속성명 또는 self._class__.속성명을 통해 접근
class Dog:
species = "치와와" # 클래스 속성
def __init__(self, name, age):
self.name = name # 인스턴스 속성
self.age = age # 인스턴스 속성
def set_species(self,new_species):
self.__class__.species = new_species #self.__class__를 통해 속성 변경
Dog.species = "리트리버" #클래스.속성명을 통해 속성 변경
08-2 클래스의 추가적인 구문
isinstance(인스턴스, 클래스): 객체(인스턴스)가 어떤 클래스로부터 만들어졌는지 확인하는 함수
*type(인스턴스) 함수를 통해 클래스도 확인할 수 있지만 isinstance()와 달리 상속 관계까진 확인할 수 없다.
클래스 변수
class 클래스명:
클래스 변수 = 값
클래스 이름.변수 이름 으로 접근
클래스 함수
@classmethod , 클래스 데코레이터를 사용해 클래스 함수를 만든다.
앞서 클래스 메소드로 다룸.
'Lauguage > Python' 카테고리의 다른 글
[Python] 동시성 관리 (1) | 2024.06.15 |
---|---|
[Python] GIL (Global Interpreter Lock) (0) | 2024.06.11 |
[Python] [혼자 공부하는 파이썬] Chapter 6-7 예외처리, 모듈 (1) | 2024.06.08 |
[Python] [혼자 공부하는 파이썬] Chapter 5. 함수 (1) | 2024.06.06 |
[Python] 객체, Iterator, Generator (1) | 2024.06.05 |