Data Analysis

[ Python ] 클래스

곽수진 2021. 9. 2. 16:19
반응형

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 클래스를 만들어보자.

 

▶️ initHuman 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