신기한 파이썬

Youngwan Cho·2021년 3월 8일
0

최근에 파이썬 학습을 위해, 토이프로젝트를 진행하면서 신기한 파이썬 문법적인 특색에 대해 정리 해보았다

웹스크랩퍼

무제한 매개변수 : *args

무제한 키워드 매개변수 : **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, 11, 12, 13, 14, 15, 16, 17, isOpen=True,  isBroken=False)

출력

(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17)
{'isOpen': True, 'isBroken': False}
  • args는 튜플로 구성되어 있다
  • kargs는 딕셔너리로 구성되어 있다

객체를 생성하고 난 후, 프로퍼티를 추가 할 수 있다

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

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

bmw = Car()
bmw.color = "blue"

print(bmw.color)

파이썬의 모든 메서드 호출시에는 매개변수가 전달된다

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

    def start():
        print("I Started")

bmw = Car()
bmw.color = "blue"
bmw.start()
Traceback (most recent call last):
  File "main.py", line 12, in <module>
    bmw.start()
TypeError: start() takes 0 positional arguments but 1 was given

위와 같이 start메소드를 실행하면, 메소드에는 선언되어 있지 않지만, 호출시 하나의 파라메터가 전달되고 있다고 에러메세지를 출력하고 있다

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

    def start(self):
        print(f"{self.name} Started")

bmw = Car()
bmw.name = "330i"
bmw.color = "blue"
bmw.start()
330i Started

객체의 함수 호출 시에는 항상 호출한 인스턴스가 전달된다, 그러므로 선언에 항상 1개 이상의 매개변수가 필요하다, 다른이름이어도 상관은 없으나 보통 self라는 이름으로 선언한다

객체가 가지고 있는 기본 메소드 오버라이드

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

    def __init__(self, **kwargs):
        self.wheels = 4
        self.windows = 4
        self.doors = 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, Color : {self.color}, Price :{self.price}"

bmw = Car(color="blue", price="$50000")
print(bmw)
Car With 4 wheels, Color : blue, Price :$50000

함수를 오버라이드 하는데 별도의 키워드는 필요 없고, 선언 하면 자동으로 오버라이드 된다.

키워드 매개변수를 통해 기본값을 할당할 수 있다

키워드 매개변수는 딕셔너리형태 이므로, 기본값을 가지고 값을 참조 할 수 있다

클래스 상속

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

  def __init__(self, **kwargs):
      self.wheels = 4
      self.windows = 4
      self.doors = 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, Color : {self.color}, Price :{self.price}"

class SuperCar(Car):
  def __init__(self, **kwargs):
    super().__init__(**kwargs)
    self.speed = kwargs.get("time", 380)

  def sport_plus_mode(self):
    print("On Sport Plus Mode")

bmw = SuperCar(color="blue", price="$50000")
print(bmw)
bmw.sport_plus_mode()

클래스 상속시 선언부에 매개변수 넘기듯이 클래스타입을 넘겨 준다

메소드 오버라이드시 상위 클래스의 메소드를 호출해준다

0개의 댓글