Class
→ 비효율을 극복하기 위함
class 클래스명(object):
def __ init __ (self, 인자):
속성(attribute) / 기증(method)
- 추상화, 개념화를 의미함
- 다수의 변수와 다수의 함수 집합
- 고유한 특성 안에서 변경은 가능
- (object)는 생략 가능
- 인스턴스(instance)
→ "구체적인 사례로 만들다"
- 객체(object)
→ 객체 = 클래스()
클래스를 인스턴스화한 것
⇒ 인간 class의 instance화(=객체)한 것은 홍길동이다
파이썬은 객체 지향 프로그래밍이다.(OOP, Objected-Oriented Programming)
→ 객체를 기본으로 함
▶️ 'abc'는 str class로 만들어낸 object(객체)임
▶️ .split 함수를 사용할 수 있는 이유 → str 객체가 함수를 가지고 있기 때문
= str class로 만들어진 객체도 함수를 종속해서 사용할 수 있음
▶️ list라는 객체를 my_list로 instance화 했기 때문에 .append() 함수를 사용할 수 있음
★ OOP의 장점 : 누군가가 이미 잘 만들어둔 class를 이용만 하면 된다는 것 ★
self
class의 instance임을 알려주는 키워드
→ instance 자신을 나타내는 것
▶️ self가 없으니 연결고리가 없어서 오류가 발생함
▶️ instance 자신을 찾아야 함
▶️ self 대신 다른 단어를 써줘도 상관 없음
→ pep에서 self를 권장함(암묵적 약속)
▶️ map 혹은 range를 입력하고 shift+tab을 누르면 map에 self가 포함되는 것을 확인할 수 있음
▶️ self가 붙은 건 instance 그 자체임을 사용하려면 다른 함수를 불러와야 함
▶️ add 사용자 정의 함수를 생성해 x값에 1을 더하도록 출력할 때 map으로 묶으니 <map at 0x1936d228cc0>이 출력됨
▶️ instance 그 자체임을 사용하기 위해 list 함수를 가져와 묶어주면 제대로 출력됨
▶️ range도 마찬가지로 단독으로 쓰였을 때는 올바른 값이 출력되지 않음
▶️ instance 그 자체임을 사용하기 위해 list 함수를 가져와 묶어주면 제대로 출력됨
생성자 함수 (init)
init은 initialize(초기화하다)의 약어
→ instance를 만들면서 자동으로 init을 통해 변수가 선언(생성)됨
▶️ 생성자 함수(인자 입력 때 self는 무시됨), 사용할 인자만 가능
▶️ 생성자 함수(init)의 인자를 입력해서 객체 생성
▶️ client의 이름, 나이 ,id를 각각 변수에 저장 후 변수.(이름/나이/id)를 입력하면 값이 출력됨
class 만들 때 __ init __을 꼭 넣어줘야 할까?
→ class를 이용하는 것은 양식을 찍어내는 효율 때문에 이용하기 때문에 instance가 속성을 가져야 하는 경우는 무조건 넣어줘야 함
→ 고객에 대한 속성(이름, 나이, id)을 가진 object가 자동으로 만들어지는 것과 고객에 대한 속성이 없는 채로 만들어지는 것은 전혀 다른 object임
▶️ instance를 생성할 때 인자값이 필수로 들어가야 함
▶️ init에 넣어놓으면 instance할 때 인자값을 넣어야 함
▶️ init이 아닌 경우에는 굳이 필요 없음
기능 / 메서드(method)
→ 기존에 사용했던 함수들 = method
▶️ 이전에 만들었던 client class에 make_account와 call 매서드를 생성함
▶️ a는 int형이기때문에 dir(a)를 출력하면 int형이 쓸 수 있는 instance method가 출력됨
▶️ instance method를 사용한 예시
▶️ class가 instance 영역에 들어갈 수 없기때문에 오류가 발생함
▶️ 변수를 생성해 출력해주면 해결됨
→ class가 바로 method를 사용할 수 없음
▶️ @(데코레이터) 붙이면 t는 class 영역으로 바뀌어 class 변수가 됨
속성(attribute)
- class에서 정의된 변수(class variable)
- 만들어질 객체 자신의 변수(instance variable)
▶️ 클래스 멤버, 클래스 변수, 클래스 어트리뷰트라고 불림
▶️ dir를 출력해보면 class_variable이 나옴 → 사용 가능
▶️ 따로 인스턴스 생성 없이 사용할 수 있음
▶️ instance_variable이 나오지 않음
→ self로 된 건 instance를 만들어야 사용이 가능함
▶️ instance를 생성한 후 dir 출력해도 instance_variable이 나오지 않음
▶️ 인자값을 입력하면 instance 고유의 값이 생기기 때문에 instance_variable이 생성됨
★ 연습 문제 ★
팔과 다리 눈, 머리를 n개씩 가지고 있는 괴상한 Human 클래스를 만들어보자.
▶️ init → Human class의 객체를 생성함
▶️ human_1의 arm, leg, eyes, head 값 입력
▶️ 위에서 입력한 값대로 사용자 정의 함수 who_am_i 출력함
내가 원하는대로 Car 클래스를 만들어보자.
▶️ Car class 생성함
▶️ color, wheel_size 객체 생성
▶️ 사용자 정의 함수 start와 forward 이용
▶️ 색상과 바퀴의 크기를 silver와 10으로 지정함
▶️ print(dir(car)) : 더 많은 사용 가능한 함수들 확인
MyMath 클래스를 만들고 더하기 기능을 갖춘 add_value와 현재 결과값을 출력하는 print_result 함수를 작성해보자.
▶️ MyMath class를 형성하여 초기값은 0으로 지정함
▶️ add_value 함수는 값을 더하도록 지정하고 print_result 함수는 지금까지의 결과값을 출력하도록 지정함
▶️ test 변수를 만들어 MyMath class 저장
'Data Analysis' 카테고리의 다른 글
[ Python ] 인덱싱 (0) | 2021.09.02 |
---|---|
[ Python ] 모듈 (0) | 2021.09.02 |
유튜브 댓글 크롤링 프로그램 (3) | 2021.09.02 |
코인 투자 프로그램 (2) | 2021.08.31 |
[ Python ] 기본값 (0) | 2021.08.31 |