[Python] 클래스(class)
클래스의 개념
파이썬의 클래스는 객체를 표현하기 위한 문법이다. 간단하게 생각해서 설계도라고 생각하면 된다.
클래스를 사용하면 객체의 구조와 행동을 정의하여 복잡한 문제를 다루기 쉽도록 만든다.
✔ 파이썬은 모든 것이 객체이기 때문에, 클래스도 객체다.
즉 클래스(class)란, 똑같은 무언가를 계속 만들어 낼 수 있는 설계 도면이고,
객체(object)란 클래스로 만든 피조물을 뜻한다.
class Cookie:
pass
a = Cookie()
b = Cookie()
Cookie()의 결과값을 리턴받은 a와 b가 객체가 된다.
클래스로 만든 객체를 인스턴스라고도 하는데,
a = cookie()로 만든 a는 객체다. 그리고 a 객체는 Cookie의 인스턴스다.
즉, 인스턴스라는 말은 특정 객체가 어떤 클래스의 객체인지를 관계 위주로 설명할 떄 사용된다.
클래스 변수
클래스를 정의할 때, 그 안에서 변수를 정의하면 모든 객체에서 동일한 데이터를 사용할 수 있다.
이를 클래스 변수라고 하는데, 이렇게 정의된 클래스 변수는 object.variable 구문을 사용해 액세스 가능하다.
class Musician:
title = "Rockstar"
클래스에 title이라는 변수를 정의하고 각각 다른 인스턴스를 호출하더라도 title이라는 변수는 언제나 똑같다.
drummer = Musician()
guitarist = Musician()
print(drummer.title)
print(guitarist .title)
>> Rockstar
>> Rockstar
🤔 참고로 함수명은 소문자 클래스명은 대문자로 작성하는 걸 권고한다고 한다.
클래스임을 누구나 알아볼 수 있도록 하기 위함이라고 한다.
메서드 (Methods)
메서드는 클래스 안에서 정의된 함수라고 생각하면 된다.
일반적인 함수를 정의할 때와 차이가 있다면, 메서드를 정의할 땐 첫 번째 인수를 self로 지정해야한다.
✔ self
self는 클래스의 메서드를 실행시키는데, 그 첫 인자로 인스턴스를 준다고 생각하면 된다.
다음과 같이 클래스 내에 메서드를 정의해보자
+) __init__() 은 초기화를 위한 함수다.
생성자(Constructor) 라고도 하며, 클래스를 호출 할때 어떤 함수나 값을 호출하고 싶을 때 정의한다.
어떤 클래스의 객체가 만들어질 때, 자동으로 호출되어 그 객체가 갖게 될 성질들을 정해준다.
class Introduce:
def __init___(self, name, job):
self.name = name
self.job = job
def info(self):
print(f"내 이름은 {self.name} 직업은 {self.job} 입니다!")
그 다음 객체를 생성하고 print를 해보면 다음과 같이 출력된다.
a = Introduce("바보", "천재")
print(a.info())
>> 내 이름은 바보, 직업은 천재 입니다!
파이썬 내부적으로는 다음과 같은 코드로 변환이 되어 실행이 되는데,
클래스.메소드(인스턴스) 구조의 메소드를 실행을 시키는데 그 첫 인자로 인스턴스를 준다.
Introduce.info(a)
함수가 인스턴스의 메서드라면, 첫 인자를 self로 줘야 대상이 되는 인스턴스가 무엇인지 알 수 있다.
인스턴스 변수
각 인스턴스가 다른 종류의 데이터, 즉 인스턴스 변수를 보유할 수 있다.
객체가 보유한 데이터인 인스턴스 변수는 해당 클래스의 모든 인스턴스가 공유하지 않는다.
빈 클래스에 두 개의 객체를 불러오자
class FakeDict:
pass
fake_dict1 = FakeDict()
fake_dict2 = FakeDict()
객체에 fake_key라는 인스턴스 변수로 각각 다른 값을 넣어주면, 인스턴스 변수가 된다.
fake_dict1.fake_key = "This works!"
fake_dict2.fake_key = "This too!"
working_string = f"{fake_dict1.fake_key}, {fake_dict2.fake_key}"
>> This works!, This too!
참고
https://hleecaster.com/python-class/
https://gist.github.com/shoark7/e57e5874fc0bad9dd995ae5ff3f45abb
'👩💻 Develope > Python' 카테고리의 다른 글
[Pandas] 데이터 프레임 특정 조건에 맞는 값 추출 (1) | 2023.11.14 |
---|---|
[Python] Plotly 설치 (0) | 2023.11.10 |
[Python] 파이참으로 django 프로젝트 세팅하기 (0) | 2023.10.10 |
[Python] pymysql 사용하기 (1) | 2023.10.05 |
[Pandas] 데이터프레임 리스트로 변환하기 (0) | 2023.10.04 |