📚 STUDY/AI

인공지능(AI) 기초 다지기: Python Object Oriented Programming(파이썬 객체 지향 프로그래밍 언어) (1)

삶감 2022. 8. 1. 15:00

인공지능(AI) 기초 다지기: Python Object Oriented Programming(파이썬 객체 지향 프로그래밍 언어) (1)

💻 객체 지향 프로그래밍 언어, Object Oriented Programming(OOP)

OPP 기반의 언어: JAVA, C++, C#

  • 객체: 실생활에서 일종의 물건, 속성(Attribute)와 행동(Action)을 가짐
  • OOP는 이러한 객체 개념을 프로그램으로 표현, 속성은 변수(variable), 행동은 함수(method)로 표현됨
  • 파이썬 역시 객체 지향 프로그램 언어

💻 클래스와 인스턴스

  • 클래스(class): 설계도에 해당
  • 인스턴스(instance): 실제 구현체
    picture 1

💻 클래스 구현하기

축구 선수 정보를 클래스로 구현

class SoccerPlayer(object):
  def __init__(self, name, position, back_number):
    self.name = name
    self.position = position
    self.back_number = back_number

  def change_back_number(self, new_number):
    print("선수의 등번호를 변경합니다 : From %d to %d" % (self.back_number, new_number))
    self.back_number = new_number


1. 클래스 선언하기

picture 2

  • python3에서 object(상속받는 객체명)는 생략해도 자동 상속이 됨

(+) 파이썬의 명명규칙(naming rule)

대부분의 OPP에서는 변수, 메서드, 클래스 및 하수 이름에 공백을 포함할 수 없음
명명규칙을 이용해 공백을 처리한다.
명명 규칙의 종류는 snake_case, kebab-case, camelCase, PascalCase가 있다.

  • snake_case : 공백을 밑줄(_)로 대체
  • kebab-case : 공백을 하이픈(-)으로 대체
  • camelCase : 첫 단어를 제외하고 공백 다음의 첫 글자를 대문자로 표현
  • PascalCase : 모든 단어의 첫 글자를 대문자로 표현

파이썬의 함수와 변수 이름에는 snake_case, 클래스 이름에는 camelCase를 사용한다.


참고




2. 속성(Attribute) 추가하기

picture 3

  • __init__ : 객체 초기화 예약 함수
  • self.으로 객체의 초기 정보를 선언할 수 있음


(+) 파이썬에서 __ 의 의미

특수한 예약 함수, 변수, 함수명 변경(맨글링)으로 사용
예) __main__, __add__, __str__, __eq__

  • __str__은 print() 함수를 쓸 때 출력할 것을 지정한다

    class SoccerPlayer(object):
      def __init__(self, name, position, back_number):
        self.name = name
        self.position = position
        self.back_number = back_number
    
    jinhyun = SoccerPlayer("Jinhyun", "MF", 10)
    print(jinhyun)

    출력결과
    picture 4



    class SoccerPlayer(object):
      def __init__(self, name, position, back_number):
        self.name = name
        self.position = position
        self.back_number = back_number
    
      def __str__(self): 
        return "Hello, My name is %s. I play in %s in center " % \
        (self.name, self.position)
    
    jinhyun = SoccerPlayer("Jinhyun", "MF", 10)
    print(jinhyun)
    

    출력결과
    picture 5




3. 메소드 구현하기

picture 6

  • 반드시 self를 추가해야만 class 함수로 인정됨

4. objects(instance) 사용하기

picture 7
Object 이름 선언과 함께 초기값 입력하기




💻 OOP Implementation Example

구현 가능한 OOP 만들기 - 노트북

  • Note를 정리하는 프로그램
  • 사용자는 Note에 뭔가를 적을 수 있다
  • Note에는 Content가 있고, 내용을 제거할 수 있다
  • 두 개의 노트북을 합쳐 하나로 만들 수 있다.
  • Note는 Notebook에 삽입된다.
  • Notebook은 Note가 삽입 될 때 페이지를 생성하며, 최고 300페이지 까지 저장 가능하다
  • 300 페이지가 넘으면 더이상 노트를 삽입하지 못한다.
class Note(object):
  def __init__(self, content = None):
    self.content = content

  def write_content(self, content):
    self.content = content

  def remove_all(self):
    self.content = ""

  def __add__(self, other):
    return self.content + other.content

  def __str__(self):
    return self.content
class NoteBook(object):
  def __init__(self, title):
    self.title = title
    self.page_number = 1
    self.notes = {}

  def add_note(self, note, page=0):
    if self.page_number <300:
      if page == 0:
        self.notes[self.page_number] = note
        self.page_number += 1
      else:
        self.notes = {page : note}
        self.page_number +=1

    else:
      print("Page가 모두 채워졌습니다.")

  def remove_note(self, page_number):
    if page_number in self.notes.keys():
      return self.notes.pop(page_number)

    else:
      print("해당 페이지는 존재하지 않습니다")

  def get_number_of_pages(self):
    return len(self.notes.keys())



728x90
728x90