최근에 파이썬 학습을 위해, 토이프로젝트를 진행하면서 신기한 파이썬 문법적인 특색에 대해 정리 해보았다
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}
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()
클래스 상속시 선언부에 매개변수 넘기듯이 클래스타입을 넘겨 준다
메소드 오버라이드시 상위 클래스의 메소드를 호출해준다