클래스
- 데이터(멤버)와 기능(method)를 가지고 있는 인스턴스 객체를 생성하기 위한 역할
- 클래스는 일종의 설계도면!
- 파이썬은 객체지향 프로그래밍 언어임
- 클래스라는 설계도면을 보며 하나의 인스턴스 객체를 만들어 냄. 이런 인스턴스 객체를 선언하여 사용가능
사용방법
- 첫 글자는 대문자로
- self는 스스로를 가리키기에 self는 인스턴스를 가리킴
class Car(object):
max_speed=300
mac_people=5
def move(self):
print('차가 움직이는 중...')
def stop(self):
print('차가 멈춤')
print(Car.max_speed) #이렇게 쓰지 마세요
#클래스에 바로 접근해서 무엇을 하는 것을 권고하지 않음!
k5 = Car() # 차 (인스턴스) = 자동차공장 (클래스)
k5.move() # 차가 움직이는 중...
k5.stop() # 차가 멈춤
print(k5.max_speed) #300
붕어빵 ( 인스턴스 ) = 붕어빵틀 ( 클래스 )
- 붕어빵틀은 먹지 못합니다… 바로 클래스에 접근해서 뭐 하지 마세요…
- 생성한 붕어빵(인스턴스) 에다가 하기

구성요소
- 클래스는 member, method로 이뤄져 있음
- 이 두개를 합쳐서 attribute라고 하기도 함
- 멤버는 매직메소드와(__쓰는거) 일반 메소드로 나뉨
인스턴스는 실제 우리가 사용하는 것, 클래스는 틀이라고 생각함
- method: 클래스 내의 함수
- member: 클래스 내의 변수
member
- 클래스 변수
- 클래스 안에 선언한 변수
- 인스턴수 변수
- 객체가 생성될 때마다 다른 변수를 가지게 됨
class Newclass:
클래스변수 = "aaaa"
def __init__(self, value):
self.인스턴스변수 = value
# 이렇게 self를 통해 설정하는 변수를 인스턴스 변수라고 부
클래스 변수
- 클래스 바로 하위에 자리하고 있는 변수
- 클래스의 이름을 통해서 접근할 수 있다
- 만약 인스턴스를 통해 변경하게 되면 원래의 클래스 변수가 은폐될 수 있음!
Car.maxspeed
인스턴스 변수
- 인스턴스 객체에서 변경, 생성을 통해 각 인스턴스 객체들이 각자 가지고 있는 값
- self를 사용해서 인스턴스 객체 사용!
x=10
# x = int(10)
''' x는 값이 10인 int 클래스의 인스턴스 '''
def __str__(self):
return f'제목: {self.title} | 내용: {self.content[:10]}...
#__str__을 통해서 print()함수를 사용했을 때 출력될 것을 설정
클래스 변수를 인스턴스를 통해 변경한다면

class Car(object):
kinds = []
speed = 300
def add_kinds(self, name):
self.kinds.append(name)
def change_speed(self, speed):
self.speed = speed
k5 = Car()
k3 = Car()
k5.add_kinds('k5')
k3.add_kinds('k3')
k5.change_speed(500)
k3.change_speed(250)
- kinds는 add_kinds를 통해 추가한 두 값 모두 들어가 있고, speed는 각자 인스턴스에서 설정했던 값으로 되어있음.
- 배열의 경우, 각 인스턴스 객체가 해당 배열의 주소를 참조하고 있기 때문에, 배열의 주소에 접근하여 조작.
- speed의 경우, 밖에서 int 숫자를 넣을 때처럼 값의 주소를 가리키는 형태임. 따라서 새로 값을 넣을 때 새로운 객체를 할당함. 따라서 각각 가리키는 게 다르다
- 만약 이 때 -5~256 사이의 수로 변경하면, 수가 같을 때 id값 같음
- 그 외에는 할당시마다 id값 달라짐(같은 수를 다시 할당하더라도!)
- 일반적인 int형의 할당과 동일
method
class Car(object):
max_speed=300
mac_people=5
def __init__(self, name): # 인스턴스가 만들어질 때 실행되는 메서드. 생성자임
self.name=name # name이 위에 있지 않지만!!! 여기서 만들어진거. name도 member
def move(self):
print('차가 움직이는 중...')
def stop(self):
print('차가 멈춤')
- 이렇게 설정한 name도 이 객체의 멤버임
self.name = name #이렇게 self에다가 name 설정하니까 당연히!!!!!!!!!이 name은 멤버입니
_ init _함수
- 생성자 역할을 하는 클래스 method
- 초기화 함수를 사용하기 위해서는 반드시 __init__을 사용, 매개변수는 self로 선언.
- 클래스 변수: 모든 인스턴스 객체들이 공유
- self: 다른 인스턴스에 해당 변수를 공유하지 않는 고유 영역
magic method ( dunder method )
- 파이썬의 클래스에서 기본적으로 내장하고 있는 특별 메소드들을 재정의
class Car(object):
kinds = []
MaxSpeed = 300
MaxPeoeple = 5
def __init__(self, 이름):
self.name = 이름
def __eq__(self, other): # 비교할 때
if self.name == other.name :
return True
return False
def __str__(self):
return f'{self.name}' # print(인스턴스명) 했을 때 출력되는 것
- 클래스 예제 → 꼭 읽어볼 것!
더보기
# 쉽고 중요한 예제!
# 이 코드는 가능하면 손으로 2 ~ 3번 써보시길 권해드립니다.
class BlogFactory(object):
def __init__(self, 제목, 내용, 조회수, 글쓴이, 생성날짜):
self.title = 제목
self.content = 내용
self.count = 조회수
self.writer = 글쓴이
self.create_date = 생성날짜
게시글1 = BlogFactory(
'오늘 제주의 날씨',
'오늘 제주의 날씨는 참 좋네요! 블라블라',
'0',
'이호준',
'2023/05/10',
)
게시글2 = BlogFactory(
'오늘 부산의 날씨',
'오늘 부산의 날씨는 참 좋네요! 블라블라',
'1000000',
'김재현',
'2023/05/10',
)
게시글3 = BlogFactory(
'오늘 강원의 날씨',
'오늘 강원의 날씨는 참 좋네요! 블라블라',
'10000',
'범남궁',
'2023/05/10',
)
data = [게시글1, 게시글2, 게시글3]
for i in data:
if i.writer == '이호준':
print(i.title)
print(i.content)
print(i.count)
print(i.create_date)
# 조금 난이도가 있는 예제이기 때문에
# 기억하지 않으셔도 됩니다.
class BlogFactory(object):
dataset = []
def __init__(self, 제목, 내용, 조회수, 글쓴이, 생성날짜):
self.title = 제목
self.content = 내용
self.count = 조회수
self.writer = 글쓴이
self.create_date = 생성날짜
self.dataset.append(self)
게시글1 = BlogFactory(
'오늘 제주의 날씨',
'오늘 제주의 날씨는 참 좋네요! 블라블라',
'0',
'이호준',
'2023/05/10',
)
게시글2 = BlogFactory(
'오늘 부산의 날씨',
'오늘 부산의 날씨는 참 좋네요! 블라블라',
'1000000',
'김재현',
'2023/05/10',
)
게시글3 = BlogFactory(
'오늘 강원의 날씨',
'오늘 강원의 날씨는 참 좋네요! 블라블라',
'10000',
'범남궁',
'2023/05/10',
)
for i in 게시글1.dataset:
print(i.title)
일반 method
- method는 언더바 두개를 앞 뒤로 사용하는 magic method와 나머지 일반 method가 있음
- 일반 method는 일반적인 함수를 사용하는 것과 동일하게 하면 됨