Published 2020. 12. 29. 19:19
728x90
반응형

☝ arguments & keyword arguments

arguments(positional arguments)

인자가 많을 때 사용 ➡ *args

 

keyword arguments

keyword arguments가 많을 때 사용 ➡ **kwargs

def plus(a, b, *args, **kwargs):
    print(args)
    print(kwargs)
    return a + b
    
plus(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, happy=True, new=True, year=True)

# (3, 4, 5, 6, 7, 8, 9, 10) 튜플 형태
# {'happy': True, 'new': True, 'year': True} 딕셔너리 형태

 

 

많은 수 계산기

def plus(*args):
    result = 0
    for number in args:
        result += number
    print(result)
    
plus(1, 2, 5, 6, 4, 3, 5, 4, 1, 6, 2, 7, 7, 8, 2, 9, 1, 6)

# 79

 

 

✌ 객체지향 프로그래밍

class

blueprint(설계도)와 비슷함 ➡ Car는  class

 

instance

설계도로 만든 살아있는 결과물, 설계도로 만든 제품이라고 생각하기 ➡ proche, ferrari, mini는 instance

class Car():
  wheels = 4
  doors = 4
  windows = 4
  seats = 4

porche = Car()
porche.color = "Red"

ferrari = Car()
ferrari.color = "Yellow"

mini = Car()
mini.color = "White"

 

 

method

class안에 있는 function

💥 method의 첫번째 argument는 method를 호출하는 instance 자신(파이썬의 특징)

     ➡ self argument를 잊으면 안됨✨

     ➡ porche.start()는 porche.start(porche)와 같음

class Car():
  wheels = 4
  doors = 4
  windows = 4
  seats = 4
  
  def start(self):
    print(self.doors)
    print("I started")
    
porche = Car()
porche.color = "Red"
porche.start()

# 4
# I started

 

dir은 class의 모든 properties를 보여줌

class Car():
  wheels = 4
  doors = 4
  windows = 4
  seats = 4
  
print(dir(Car))

''' 
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', 
'__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', 
'__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', 
'__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 
'doors', 'seats', 'wheels', 'windows']
'''

 

porche를 print할때 호출됐던 __str__을 override(재정의)하기

porche를 print할때마다 Car with {self.wheels} wheels 출력

 

class Car():
  wheels = 4
  doors = 4
  windows = 4
  seats = 4
  
  def __str__(self):
    return f"Car with {self.wheels} wheels"

porche = Car()  
print(porche)

# Car with 4 wheels

 

class를 만들었을 때 바로 만들어지는 method인 __init__ 메소드 재정의하기

class Car():
  
  def __init__(self, **kwargs):
    self.wheels = 4
    self.doors = 4
    self.windows = 4
    self.seats = 4
    self.color = kwargs.get("color", "black")
    self.price = kwargs.get("price", "$20")
  
  def __str__(self):
    return f"Car with {self.wheels} wheels"
  	

porche = Car(color="green", price="$40")  
print(porche.color, porche.price)

mini = Car()
print(mini.color, mini.price)

# green $40
# black $20

 

 

inherit(상속)과 extend(확장)

class Car():
  
  def __init__(self, **kwargs):
    self.wheels = 4
    self.doors = 4
    self.windows = 4
    self.seats = 4
    self.color = kwargs.get("color", "black")
    self.price = kwargs.get("price", "$20")
  
  def __str__(self):
    return f"Car with {self.wheels} wheels"

class Convertible(Car):  #Convertible 클래스는 extend된 Car class를 가지고 있음
  
  def __init__(self, **kwargs): # 상속과 확장
    super().__init__(**kwargs)  # super()는 부모클래스 호출하는 함수!
    self.time = kwargs.get("time", 10)  
  
  def take_off(self):
    return "taking off"
    
  def __str__(self):
    return f"Car with no roof"


porche = Convertible(color="green", price="$40")  
print(porche.color)

# green


 

💡 python은 띄어쓰기와 tab을 섞어서 사용하면 오류 가능성 ⬆

💡 tuple 괄호로 있는 자료구조를 말함

반응형

'프로그래밍 > Django' 카테고리의 다른 글

Django란?  (0) 2020.12.28
복사했습니다!