티스토리 뷰
1. 클래스란?
- 객체 지향 프로그래밍(OOP)의 기본 단위로, 객체(obejct)를 생성하기 위한 템플릿(template)
- 변수(속성)와 함수(메서드)를 모아둔 틀
class 계산기:
# 생성자 메서드 (초기화)
def __init__(self, 속성1, 속성2):
self.속성1 = 속성1
self.속성2 = 속성2
# 메서드
def 더하기(self):
return self.속성1 + self.속성2
내_계산기 = 계산기(4,2)
친구_계산기 = 계산기(3,5)
2. Class와 Instance
- Class(계산기)로 객체(내_계산기)를 만들면 그 "관계"를 말할 때, 내_계산기(객체)는 계산기(클래스)의 "인스턴스"라 함
3. self
- 생성된 객체 자기 자신, 여기선 "내_계산기"가 self가 된다. 자기 자신이 들어가기 때문에 파라미터에 입력은 하지 않음
내_계산기 = 계산기(4,2)
내_계산기.더하기()
4. __init__ : 생성자
- 생성자란? 객체가 생성될때 자동으로 호출되는 메서드
* __init__이 없다면?
class 계산기:
def setdata(self, 속성1, 속성2):
self.속성1 = 속성1
self.속성2 = 속성2
# 메서드
def 더하기(self):
return self.속성1 + self.속성2
- 파라미터를 객체 생성 "후" 입력해야 하고, 메서드들은 속성입력 함수를 사용한 뒤에 쓸 수 있다
=> 객체에 초기값을 설정해야 하는 경우에는 매우 불편하기 때문에 생성자(__init__)를 사용해야 한다.
- class에는 파라미터를 넣을 수 없기 때문, class가 아니라 setdata함수에 넣어야 함
계산기1 = 계산기(4,2) # 에러남, class에 파라미터를 넣을 수 없기 때문
계산기2 = 계산기()
계산기2.더하기(4,2) # 에러남, 더하기에는 self만 지정되어 있어 setdata를 먼저실행해야함
계산기3= 계산기()
계산기3.setdata(4,2)
계산기3.더하기() # 6
- 그냥 setdata를 "이름만" __init__으로 바꿔주면, 객체 생성시 해당 내용이 자동으로 호출되어 객체생성과 setdata를 동시에 할 수 있다.
5. 클래스의 상속
- 다른 클래스의 기능을 사용 할 수 있게 해줌, 메서드를 새로 정의하지 않았지만, 상속받은 클래스의 메서드를 쓸 수 있다.
class 멋진계산기(계산기):
pass
new_계산기 = 멋진계산기(3,5)
new_계산기.더하기() # 8
* pass: 아무것도 수행하지 않는 문법, 임시로 코드를 작성할때 주로 사용한다.
6.메서드 오버라이딩
- 부모 클래스에 있는 메서드를 동일한 이름으로 다시 만드는 것(기존의 메서드를 수정하고 싶을 때)
class 멋진계산기(계산기):
def 더하기(self):
return f"{self.속성1}과 {self.속성2}를 더한 값은{self.속성1 + self.속성2}입니다"
new_계산기 = 멋진계산기(3,5)
new_계산기.더하기() # '3과 5를 더한 값은8입니다'
7. 클래스 변수
- 클래스.속성 = 바꿀거, 이렇게 직접 지정하면 클래스로 생성된 객체들의 변수도 같이 바뀐다.
- 객체의 변수를 바꾸면 객체 안에서만 지속되고, 클래스는 변하지 않는다
- 객체 변수를 바꾼 적이 있으면, 클래스 변수를 바꿔도 객체 변수는 바뀌지 않는다
class Family:
lastname = "김"
a = Family()
b = Family()
Family.lastname # 김
a.lastname # 김
b.lastname # 김
a.lastname = "최"
a.lastname # 최
b.lastname # 김
Family.lastname = "박"
Family.lastname # 박
a.lastname # 최
b.lastname # 박
※ 참고자료: 점프 투 파이썬[박응용 지음]
'AI > Python' 카테고리의 다른 글
[python] 클로저와 nonlocal, 데코레이터(@) (0) | 2024.12.02 |
---|---|
[python] pickle, with (3) | 2024.12.02 |
[python] 비트 NOT 연산자 ~x (0) | 2024.07.10 |
[프로그래머스 입문] dict, math,sort와 sorted에 key값 넣기, 이진수와 십진수 변환, 이차원 배열의 최댓값과 최솟값 (0) | 2024.06.18 |
[python] 예외처리, 파일 다루기 (0) | 2024.06.18 |
- Total
- Today
- Yesterday
- 오픽
- ChatGPT
- Ai
- 뉴스
- 오블완
- 기초
- C언어
- 30분
- 운동
- 영어회화
- 습관
- 실기
- 프로그래머스
- 스크랩
- 티스토리챌린지
- 경제
- llm
- 아침운동
- 빅데이터 분석기사
- IH
- 루틴
- 다이어트
- opic
- Python
- SQL
- 줄넘기
- 갓생
- 미라클모닝
- 고득점 Kit
- 아침
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |