[TIL. 22 ]Python- Class2

신지원·2021년 3월 22일
0

Python

목록 보기
5/14
post-thumbnail

class 한번 정리는 했었지만, 이번에 다시 공부하면서 새로 알게 된 사실 정리!

comedian이 class가 되고 그 instance들이 이영자 외 3명이고,
이 사람들은 instance들을 객체가 된다.

class: 같은 부류끼리 나눔

클래스를 사용하면 코드의 구조를 더 효과적으로 구현 가능하다.
클래스 위주로 코드를 작성하는 것을 객체 지향 프로그래밍(object oriented programming)이라한다.

  1. 클래스를 정의하고 실체화 하기
class Car:
    pass

class를 정의

hyundai = Car()
bmw = Car()

클래스 실체화
즉, car 클래스를 실체화한것이 현대와 bmw 라는 객체이다.

  1. 속성 (attribute)
    클래스는 공통점이 있는 것들끼리 나누는것 -> 공통 요소들(=속성)
    init 함수를 통해 정의
    init 함수는 클래스가 실체화될때 사용하는 함수이다.

class Car:
    def __init__(self, maker, model, horse_power):
        self.maker       = maker
        self.model       = model
        self.horse_power = horse_power
        
        
        
hyundai = Car("현대", "제네시스", 500)

2-1. self
self는 어떠한 실체를 가리키는 단어.
instance의 object들을 가리킨다.

class 변수에 접근할때 self를 사용!!!!!

2-2. init

  • __init__ 메소드는 클래스가 실체화 될때 자동으로 호출이 된다.
  • __init__ 메소드의 self 파라미터는 클래스가 실체화된 객체를 넘겨주어야 하며, 파이썬이 자동으로 넘겨준다.
  • __init__ 메소드의 self 파라미터는 항상 정의되어야 있어야 하며 맨 처음 파라미터로 정의 되어야 한다 (그래야 파이썬이 알아서 넘겨줄 수 있으므로)



Q. Class 를 직접 구현해 보겠습니다.

Database 라는 이름의 class를 구현해 주세요.

Database 클래스 내부에 다음의 속성(attribute)들을 선언해주세요.

  • name : database의 이름
  • size : 저장할 수 있는 데이터의 max 사이즈. Size를 넘어서는 데이터를 저장할 수 없다.

Database 클래스 내부에 다음의 메소드들을 구현해주세요.

  • insert
  • select
  • update
  • delete

각 메소드들에 대한 설명은 아래와 같습니다.

Insert

insert 메소드는 self 외에 2개의 parameter를 받습니다.

fieldvalue 입니다.

Field 는 저장하고자 하는 데이터의 필드명이고 value는 값입니다.

Fieldvalue는 내부적으로 dictionary에 저장되어야 합니다.

insert 메소드는 다음 처럼 호출 할 수 있습니다.

# 객체 이름이 db 라는 가정하에
db.insert("name", "정우성")

insert 메소드는 특별한 return 값은 없습니다.

단, 만일 내부 dictionary의 총 사이즈가 Database 클래스의 size 속성보다 크면 더이상 새로운 값들을 저장하지 말아야 합니다.

Select

select 메소드는 self 외에 1개의 parameter를 받습니다.

바로 field 입니다.

field 는 읽고자 하는 데이터의 필드명 입니다.

내부적으로 데이터를 저장하고 있는 dictionary에서 해당 field에 해당하는 키와 연결되어 있는 값을 return 해주어야 합니다.

예를 들어, 이미 name이라는 필드명으로 "정우성" 이라는 값을 저장했다고 한다면:

# 객체 이름이 db 라는 가정하에
db.select("name")
> "정우성"

이 되어야 합니다.

만일 해당 필드값으로 저정되어 있는 값이 없다면 None 을 return 해주세요.

Update

self 외에 2개의 parameter를 받습니다.

fieldvalue 입니다.

이름 그대로 이미 저장되어 있는 값을 수정하는 메소드 입니다.

# 객체 이름이 db 라는 가정하에
db.update("name", "아이유")

만일 field값에 해당하는 데이터가 저장되어 있지 않으면 아무것도 하지 않습니다.

그리고 특별한 return 값은 없습니다.

Delete

delete 메소드는 self 외에 1개의 parameter를 받습니다.

field 입니다.

field지우고자 하는 데이터의 필드명 입니다.

# 객체 이름이 db 라는 가정하에
db.delete("name")

만일 field값에 해당하는 데이터가 저장되어 있지 않으면 아무것도 하지 않습니다.

그리고 특별한 return 값은 없습니다.

class Database:
  def __init__(self,name, size):
    self.name = name
    self.size = size
    self.data = {}   # 비어있는 딕셔너리를 만들어준다.

  def insert (self,field,value):
    if len(self.data) >= self.size:  # class에 있는 변수들에 접근할때는 self를 사용한다. 
      pass
    else:
      self.data[field] = value   # value는 insert 메서드에 접근하는 것이니 self 사용 안한것임!!
  
  def select (self,field):
    if field in self.data:
      return self.data[field]
    else:
      return None

  def update(self,field, value):
    if field in self.data:
      self.data[field] = value
     
  def delete (self,field):
    if field in self.data:
      del self.data[field]
    else:
      pass

class 변수에 접근 할때 self를 쓰고 단순히 method parameter에 접근할때는 사용하지 않는다

0개의 댓글