[Day 4]

Dongbin Lee·2021년 1월 21일
0

2021부캠AI

목록 보기
2/24

2021 부스트캠프 Day 4

[Day 4] 파이썬 기초문법 III


Python Object-Oriented Programming(객체 지향 프로그래밍)

예를 들어, 수강신청 프로그램을 작성한다.

수강신청 관련

  • 주체들(교수, 학생, 관리자)
  • 행동(수강신청, 과목입력)
  • 데이터(수강과목, 강의 과목)

위와 같이 객체들을 나누어 프로그램 작성 후 연결하는 방법이 객체 지향 프로그램이라고 한다.

객체지향 프로그래밍 개요

  • OOP(Object-Oriented Programming)
  • 객체 : 실생활에서 일종의 물건 | 속성(Attribute)행동(Action)을 가짐
  • 속성은 변수(variable), 행동은 함수(method)로 표현
  • 파이썬 역시 객체지향 프로그램 언어
  • OOP는 설계도에 해당하는 클래스(class)와 실제 구현체인 인스턴스(instance)으로 나눔

class 구현하기

축구 선수 정보를 Class로 구현하기 👇🏻

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

Python programming rule

  • snake_case : 띄워쓰기 부분에 _ 를 추가
  • CamelCase : 띄워쓰기 부분에 대문자

Attribute 추가하기

  • Attribute 추가는 __init__(객체 초기화 예약 함수), self와 함께 사용.

Python에서의 __의미
특수한 에약 함수나 변수 그리고 함수명 변경(맨글링)으로 사용
ex. __main__,__add__, __str__, __eq__

   __str__ : print(class_name)실행시 출력형태에 대한 예약어.
  __add__ : class의 +연산자에 대해 변경할수 있는 예약어.

method 구현하기

  • method(Action) 추가는 기존 함수와 같으나, 반드시 self를 추가해야만 class함수로 인정됨

objects(instance) 사용하기

  • Object 이름 선언과 함께 초기값 입력 하기
    __init__ 선언값들과 맞추어 초기값을 선언한다

   위 SoccerPlayer를 바탕으로 사용 시 👇🏻

jinhyun = SoccerPlayer("Jinhyun","MF",10)
print("현재 선수의 등번호는: ", jinhyun.back_number)

OOP characteristics

상속(Inheritance)

  • 부모클래스로 부터 속성과 Method를 물렵다은 자식 클래스를 생성하는 것
class Person(object): # 부모 클래스 Person 선언
	def __init__(self, name, age, gender):
		self.name = name
		self.age = age
		self.gender = gender
	
    	def about_me(self): # Method 선언
		print("저의 이름은 ", self.name, "이구요, 제 나이는 ", str(self.age), "살 입니다.")


class Employee(Person): # 부모 클래스 Person으로 부터 상속
	def __init__(self, name, age, gender, salary, hire_date):
		super().__init__(name, age, gender) # 부모객체 사용
		self.salary = salary
		self.hire_date = hire_date # 속성값 추가
	
    	def do_work(self): # 새로운 메서드 추가
		print("열심히 일을 합니다.")
	
    	def about_me(self): # 부모 클래스 함수 재정의
		super().about_me() # 부모 클래스 함수 사용
		print("제 급여는 ", self.salary, "원 이구요, 제 입사일은 ",self.hire_date," 입니다.")

다형성(Polymorphism)

  • 같은 이름의 메소드의 내부 로직을 다르게 작성
  • Dynamic Typing특성으로 인해 파이썬에서는 같은 부모클래스의 상속에서 주로 발생
class Animal:
	def __init__(self, name): # Constructor of the class
		self.name = name

	def talk(self): # Abstract method, defined by convention only
		raise NotImplementedError("Subclass must implement abstract method")


class Cat(Animal):
	def talk(self):
		return 'Meow!'


class Dog(Animal):
	def talk(self):
		return 'Woof! Woof!'

animals = [Cat('Missy'), Cat('Mr. Mistoffelees'), Dog('Lassie')]
for animal in animals:
	print(animal.name + ': ' + animal.talk())

가시성(Visibility)

  • 객체의 정보를 볼 수 있는 레벨을 조절하는 것
  • 누구나 객체 안에 모든 변수를 볼 필요가 없음
class Inventory(object):
	def __init__(self):
		self.__items = [] # __를 사용하여 Private 변수로 선언
	
    	def add_new_item(self, product):
		if type(product) == Product:
			self.__items.append(product)
			print("new item added")
		else:
			raise ValueError("Invalid Item")

	def get_number_of_items(self):
		return len(self.__items)
        
class Inventory(object):
	def __init__(self):
		self.__items = []

	@property #property decorator 숨겨진 변수를 반환하게 해줌 : print(my_inventory.items)
	def items(self):
		return self.__items

Module and Project

파이썬은 대부분의 라이브러리가 이미 다른 사용자에 의해서 구현되어 있다.
-> 남이만든 프로그램쓰는법 객체 < 모듈

모듈(Module)

  • 어떤 대상의 부분 혹은 조각
  • 프로그램에서는 작은 프로그램 조각들, 모듈들을 모아서 하나의 큰 프로그램을 개발함
  • python의 Module==py 파일을 의미
  • 같은 폴더에 Module에 해당하는 .py 파일과 사용하는 .py을 저장한 후
  • import 문을 사용해서 module을 호출

패키지(Package)

  • 하나의 대형 프로젝트를 만드는 코드의 묶음
  • 다양한 모듈들의 합, 폴더로 연결됨
  • __init__, __main__ 등 키워드 파일명이 사용됨
  • 다양한 오픈 소스들이 모두 패키지로 관리됨


    패키지 만들기
  1. 기능들을 세부적으로 나눠 폴더로 만듦
  2. 각 폴더별로 필요한 모듈을 구현함
  3. 1차 Test-python shell
  4. 폴더별로 __init__.py 구성하기
    • 현재 폴더가 패키지임을 알리는 초기화 스크립트
    • 없을 경우 패키지로 간주하지 않음(3.3+ 부터는 X)
    • 하위 폴더와 py파일(모듈)을 모두 포함함
    • import 와 __all__ keyword 사용
  5. __main__.py 파일 만들기

피어세션 (2021.01.21)

강의 내용 중 decorator에 대한 논의를 시작으로 진행됨
해당 논의가 끝나고 팀원분들 중 웹 개발자로 현직에서 일하시다가 오신분들도
계셨어서, IT의 현직에서 일하셨던 분들에게 궁금했던 사항들을 몇개 여쭤볼수 있었다.


profile
Preparation student who dreams of becoming an AI engineer.

0개의 댓글