__init__
의 역할class Car: def __init__(self, maker, model, horse_power): self.maker = maker self.model = model self.horse_power = horse_power
__init__
처럼 단어의 앞 뒤에 밑줄 두개가 있는 메소드를 스페셜 메소드 혹은 매직 메소드라고 한다.- 여기서 self는 class의 실체(instance)인 객체(object)를 가리킨다.
- self.maker = maker와 같은 코드를 저장하는 이유는 클래스 안에 다른 메소드에서 사용하기 위해서이다.
hyundai = Car("현대", "제네시스", 500)
- 여기서의 self는 hyndai를 가리킨다.
- 위의 코드에서 이미
__init__
메소드는 호출이 되었다.- 이처럼 클래스가 실체화 될 때 자동으로
__init__
메소드가 호출이 된다.
Class 를 직접 구현해 보겠습니다.
Database
라는 이름의 class를 구현해 주세요.
Database
클래스 내부에 다음의 속성(attribute)들을 선언해주세요.
name
: database의 이름size
: 저장할 수 있는 데이터의 max 사이즈. Size를 넘어서는 데이터를 저장할 수 없다.Database
클래스 내부에 다음의 메소드들을 구현해주세요.
insert
select
update
delete
각 메소드들에 대한 설명은 아래와 같습니다.
insert
메소드는 self
외에 2
개의 parameter를 받습니다.
field
와 value
입니다.
Field
는 저장하고자 하는 데이터의 필드명이고 value
는 값입니다.
Field
와 value
는 내부적으로 dictionary
에 저장되어야 합니다.
insert
메소드는 다음 처럼 호출 할 수 있습니다.
# 객체 이름이 db 라는 가정하에
db.insert("name", "정우성")
insert
메소드는 특별한 return 값은 없습니다.
단, 만일 내부 dictionary의 총 사이즈가 Database
클래스의 size
속성보다 크면 더이상 새로운 값들을 저장하지 말아야 합니다.
select
메소드는 self
외에 1개의 parameter를 받습니다.
바로 field
입니다.
field
는 읽고자 하는 데이터의 필드명 입니다.
내부적으로 데이터를 저장하고 있는 dictionary에서 해당 field
에 해당하는 키와 연결되어 있는 값을 return 해주어야 합니다.
예를 들어, 이미 name
이라는 필드명으로 "정우성"
이라는 값을 저장했다고 한다면:
# 객체 이름이 db 라는 가정하에
db.select("name")
> "정우성"
이 되어야 합니다.
만일 해당 필드값으로 저정되어 있는 값이 없다면 None
을 return 해주세요.
self
외에 2
개의 parameter를 받습니다.
field
와 value
입니다.
이름 그대로 이미 저장되어 있는 값을 수정하는 메소드 입니다.
# 객체 이름이 db 라는 가정하에
db.update("name", "아이유")
만일 field
값에 해당하는 데이터가 저장되어 있지 않으면 아무것도 하지 않습니다.
그리고 특별한 return
값은 없습니다.
delete
메소드는 self
외에 1
개의 parameter를 받습니다.
field
입니다.
field
는 지우고자 하는 데이터의 필드명 입니다.
# 객체 이름이 db 라는 가정하에
db.delete("name")
만일 field
값에 해당하는 데이터가 저장되어 있지 않으면 아무것도 하지 않습니다.
그리고 특별한 return
값은 없습니다.
class Database: def __init__(self,name,size): # 생성자 메소드 define self.name = name # 다음에도 사용하기 위해 객체에 입력받은 name값 저장 self.size = size self.data = {} # 빈 딕셔너리 선언 def insert(self,field,value): if len(self.data) >= self.size: return 'nono' else: self.data[field] = value # 입력받은 field와 value는 외부에서 들어온 값이기 때문에 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]