[Python]Class

jiminnote·2022년 5월 27일
0

[Python]

목록 보기
22/32

OOP

:Object Oriented Programming(객체 지향 프로그래밍)
코드를 클래스 위주로 작성하는 것

class ComedianName:
    # 내용 코드

클래스를 쓰는 이유
코드의 구조를 더 효과적으로 구현하기 위해

class 이름은 CamelCase사용

Class의 attribute(속성)
class에 정의되는 공통 요소 = class의 attribute

속성들을 class에서 정의하기 위해서는 __init__ 함수를 통해서 정의 해주면 된다.

class Food:
    def __init__(self, name, price, types):
        self.name = name
        self.price = price
        self.types = types

class 안에서 정의해주는 함수를 메소드라고 한다.

pastry = Food("패스츄리", 1500 , "bread")

이런식으로 __init__ 이라고 메소드 이름을 명확하게 명시하지는 않았지만 클래스가 실체화 될때 자동으로 __init__ 메소드가 호출

class Food:
    def __init__(self, name, price, types):

사실상 인자는 4개인데 지금 호출된부분을 보면
name, price, types 이렇게 3개뿐이다

그렇다면 self는?
class의 실체(instance)객체(object)를 가르킨다.

클래스를 실체화 할때 객체(self)를 자동으로 __init__ 함수에 넘겨준다.

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

Parameter로 넘겨진 name, price, types 값을 동일한 이름으로 self 에 저장 하는 이유

나중에 다시 사용하기 위해서

즉, 다른 메소드에서 사용하기 위해서

Class Method

__init__메소드 외에 다른 메소드 추가하기

class Food:
    def __init__(self, name, price, types):
        self.name = name
        self.price = price
        self.types = types
        
    def eat(self):
        return "냠냠"
        
pastry = Food("패스츄리", 1500 , "bread")
pastry.eat() #냠냠

빵의 이름도 함께 리턴하려면

    def eat(self):
        return f"{self.name} 냠냠"
        
pastry = Food("패스츄리", 1500 , "bread")
pastry.eat() #패스츄리 냠냠

📍클래스 직접 구현해보기

조건

  • class의 이름 : Database

  • Database 클래스 내부 속성
    name : database의 이름
    size : 저장할 수 있는 데이터의 max 사이즈. Size를 넘어서는 데이터를 저장할 수 없다.

  • Database 클래스 내부에 다음의 메소드들을 구현

    insert
    select
    update
    delete

class Database:
  
  def __init__(self, name, size):
    self.name = name
    self.size = size
    self.dict = {}
    
  def insert(self, field, value):  
    if len(self.dict) < self.size: # size보다 dict가 작으면
      self.dict.update({field : value}) #update
    else: 
      pass 
    
  def select(self, field):
    if field in self.dict.keys():   #dict 값 안에 field가 있으면
      return self.dict[field]   #해당 key 리턴
    else: 
      return None

  def update(self, field, value):
    if field in self.dict.keys(): #dict 값 안에 field가 있으면
      self.dict.update({field : value}) #원하는 값으로 수정
    else:  
      None
    
  def delete(self, field):
    if field in self.dict.keys(): #dict 값 안에 field가 있으면
      del self.dict[field] #삭제
    else:
      pass

📍집고 넘어가기

self.dict.update({field : value}) #update
  • 딕셔너리형 수정?덮어쓰기? 할때 (삭제할때도 방법 동일)
dict.update({key:value}) 
dict_example = {'홈런볼': 1800, '빈츠': 2500, '화이트하임': 2300} 
dict_example.update({'빈츠':3000,'화이트하임':3500}) 
print(dict_example) #dict_example = {'홈런볼': 1800, 빈츠':3000,'화이트하임':3500} 
  • 해당 value의 key 리턴하기
if '홈런볼' in dict_example:
    print(dict_example['홈런볼']) #1800
profile
Hello. I'm jimin:)

0개의 댓글