클래스 정의
class Car:
def __init__(self, seat, handle_size, wheel, luggage):
self.seat = seat
# __속성명: private
self.__handle_size = handle_size
self.wheel = wheel
# _속성명: protected
self._luggage = luggage
print("Car.__init__")
def honk(self):
print("빵빵")
def drive(self):
print("자동차가 출발합니다")
def load_luggage(self, luggage):
if luggage > self._luggage:
print("적재물이 너무 많습니다")
else:
print("자동차에 " + luggage + "만큼의 짐을 싣습니다")
def __str__(self): # str()을 override
return str(self.__dict__)
class Truck(Car):
def __init__(self, seat, handle_size, wheel, luggage):
super().__init__(seat, handle_size, wheel, luggage)
print("Truck.__init__")
# Override
def drive(self):
print("출발합니다. 적재함 고정이 잘 되었는지 확인하세요")
class Sedan(Car):
def __init__(self, seat, handle_size, wheel, luggage):
super().__init__(seat, handle_size, wheel, luggage)
print("Sedan.__init__")
def drive(self):
super().drive()
print("안전 운전 하세요")
class Bus(Car):
def __init__(self, seat, handle_size, wheel, luggage):
super().__init__(seat, handle_size, wheel, luggage)
print("Bus.__init__")
def drive(self):
super().drive()
print("승객의 안전띠를 확인해 주세요")
In:
cars = list()
cars.append(Car(4, 300, 4, 300))
cars.append(Truck(4, 450, 4, 1000))
cars.append(Sedan(4, 300, 4, 300))
cars.append(Bus(25, 480, 4, 0))
for i in cars:
print(i)
print(type(i))
i.drive()
# 속성 추가, Car의 __handle_size와 별개의 새로운 속성이 생성됨
# 기존 handle_size 속성의 이름은 _Car__handle_size
i.__handle_size = 200
print(i.__handle_size)
print(i._Car__handle_size) # Python의 경우 protected와 private이 엄격하게 지켜지지 않으므로 접근이 가능하긴 함
i.handle_size = 200
print(i)
print()
Out:
Car.__init__
Car.__init__
Truck.__init__
Car.__init__
Sedan.__init__
Car.__init__
Bus.__init__
{'seat': 4, '_Car__handle_size': 300, 'wheel': 4, 'luggage': 300}
<class '__main__.Car'>
자동차가 출발합니다
200
300
{'seat': 4, '_Car__handle_size': 300, 'wheel': 4, 'luggage': 300, '__handle_size': 200, 'handle_size': 200}
{'seat': 4, '_Car__handle_size': 450, 'wheel': 4, 'luggage': 1000}
<class '__main__.Truck'>
출발합니다. 적재함 고정이 잘 되었는지 확인하세요
200
450
{'seat': 4, '_Car__handle_size': 450, 'wheel': 4, 'luggage': 1000, '__handle_size': 200, 'handle_size': 200}
{'seat': 4, '_Car__handle_size': 300, 'wheel': 4, 'luggage': 300}
<class '__main__.Sedan'>
자동차가 출발합니다
안전 운전 하세요
200
300
{'seat': 4, '_Car__handle_size': 300, 'wheel': 4, 'luggage': 300, '__handle_size': 200, 'handle_size': 200}
{'seat': 25, '_Car__handle_size': 480, 'wheel': 4, 'luggage': 0}
<class '__main__.Bus'>
자동차가 출발합니다
승객의 안전띠를 확인해 주세요
200
480
{'seat': 25, '_Car__handle_size': 480, 'wheel': 4, 'luggage': 0, '__handle_size': 200, 'handle_size': 200}
In:
class Car:
def __init__(self, seat, handle_size, wheel, luggage):
self.seat = seat
# __속성명: private
self.__handle_size = handle_size
self.wheel = wheel
# _속성명: protected
self._luggage = luggage
print("Car.__init__")
def honk(self):
print("빵빵")
def drive(self):
print("자동차가 출발합니다")
def load_luggage(self, luggage):
if luggage > self._luggage:
print("적재물이 너무 많습니다")
else:
print("자동차에", luggage, "만큼의 짐을 싣습니다")
def __str__(self):
return str(self.__dict__)
class Truck(Car):
def __init__(self, seat, handle_size, wheel, luggage):
super().__init__(seat, handle_size, wheel, luggage)
print("Truck.__init__")
# Override
def drive(self):
print("출발합니다. 적재함 고정이 잘 되었는지 확인하세요")
class Sedan(Car):
def __init__(self, seat, handle_size, wheel, luggage):
super().__init__(seat, handle_size, wheel, luggage)
print("Sedan.__init__")
def drive(self):
super().drive()
print("안전 운전 하세요")
class Bus(Car):
def __init__(self, seat, handle_size, wheel, luggage):
super().__init__(seat, handle_size, wheel, luggage)
print("Bus.__init__")
def drive(self):
super().drive()
print("승객의 안전띠를 확인해 주세요")
cars = list()
cars.append(Car(4, 300, 4, 300))
cars.append(Truck(4, 450, 4, 1000))
cars.append(Sedan(4, 300, 4, 300))
cars.append(Bus(25, 480, 4, 0))
for i in cars:
print(i)
print(type(i))
i.drive()
i.load_luggage(250)
i.load_luggage(1100)
print()
Out:
Car.__init__
Car.__init__
Truck.__init__
Car.__init__
Sedan.__init__
Car.__init__
Bus.__init__
{'seat': 4, '_Car__handle_size': 300, 'wheel': 4, '_luggage': 300}
<class '__main__.Car'>
자동차가 출발합니다
자동차에 250 만큼의 짐을 싣습니다
적재물이 너무 많습니다
{'seat': 4, '_Car__handle_size': 450, 'wheel': 4, '_luggage': 1000}
<class '__main__.Truck'>
출발합니다. 적재함 고정이 잘 되었는지 확인하세요
자동차에 250 만큼의 짐을 싣습니다
적재물이 너무 많습니다
{'seat': 4, '_Car__handle_size': 300, 'wheel': 4, '_luggage': 300}
<class '__main__.Sedan'>
자동차가 출발합니다
안전 운전 하세요
자동차에 250 만큼의 짐을 싣습니다
적재물이 너무 많습니다
{'seat': 25, '_Car__handle_size': 480, 'wheel': 4, '_luggage': 0}
<class '__main__.Bus'>
자동차가 출발합니다
승객의 안전띠를 확인해 주세요
적재물이 너무 많습니다
적재물이 너무 많습니다
클래스 Truck에서 load_luggage()를 오버라이드 한 후 실행해본다.
class Truck(Car):
def __init__(self, seat, handle_size, wheel, luggage):
super().__init__(seat, handle_size, wheel, luggage)
print("Truck.__init__")
# Override
def drive(self):
print("출발합니다. 적재함 고정이 잘 되었는지 확인하세요")
def load_luggage(self, luggage):
if luggage > (self._luggage + (self._luggage * 0.10)):
print("적재물이 너무 많습니다.")
else:
print("자동차에", luggage, "만큼의 짐을 싣습니다")
Out:
{'seat': 4, '_Car__handle_size': 450, 'wheel': 4, '_luggage': 1000}
<class '__main__.Truck'>
출발합니다. 적재함 고정이 잘 되었는지 확인하세요
자동차에 250 만큼의 짐을 싣습니다
자동차에 1100 만큼의 짐을 싣습니다
Setter, Getter
함수를 꾸며주는 @(decorator)
함수 위에 @property를 붙이면 getter 역할을 하고 @속성.setter를 붙이면 setter 역할을 한다.
클래스 Car에 getter와 setter 함수를 추가한다.
class Car:
def __init__(self, seat, handle_size, wheel, luggage):
self.seat = seat
# __속성명: private
self.__handle_size = handle_size
self.__wheel = wheel
# _속성명: protected
self._luggage = luggage
print("Car.__init__")
def honk(self):
print("빵빵")
def drive(self):
print("자동차가 출발합니다")
def load_luggage(self, luggage):
if luggage > self._luggage:
print("적재물이 너무 많습니다")
else:
print("자동차에", luggage, "만큼의 짐을 싣습니다")
def __str__(self):
return str(self.__dict__)
@property
def wheel(self):
return self.__wheel
@wheel.setter
def wheel(self, wheel):
if wheel > 1:
self.__wheel = wheel
In:
cars = list()
cars.append(Car(4, 300, 4, 300))
cars.append(Truck(4, 450, 4, 1000))
cars.append(Sedan(4, 300, 4, 300))
cars.append(Bus(25, 480, 4, 0))
cars[2].wheel = 1
print(cars[2].wheel)
cars[2].wheel = 6
print(cars[2].wheel)
Out:
4
6
'파이썬 Python' 카테고리의 다른 글
[Python] 중급 1 문자열 (0) | 2021.02.25 |
---|---|
[Python] 초급 12 클래스 예제 (0) | 2021.02.21 |
초급 9 XML (0) | 2021.01.15 |
초급 8 REST, JSON (0) | 2021.01.14 |
초급 7 딕셔너리, 프로그램 설계 (0) | 2021.01.14 |