상속(Inheritance)(IS-A)
- 자식 클래스(sub class)가 부모 클래스의 내용(속성과 메소드)를 물려받는 것.
class Parrent: # super class
name = "이름"
age = "나이"
language = "언어"
def show(self):
print("부모 클래스")
class child(Parrent): # sub class
def __init__(self, name, age, code):
self.name = name
self.age = age
self.code = code
def show_name(self):
print("이름 : ", self.name)
a = child('이정개', '23', '파이썬')
a.show()
# "부모 클래스"
a.show_name()
# "이름 : 이정개"
a.age
# "23"
a.language
# "파이썬"
- 파이썬은 C#, JAVA와 달리 다중상속이 가능
class Parent1: # 부모 클래스 1
pass
class Parent2: # 부모 클래스 2
pass
class Child(Parent1, Parent2): # 자식 클래스
pass
합성(Composition)(HAS-A)
- 물려받는 상속과 다르게 클래스를 소유하는 개념
- 합성 주체 클래스가 클래스들을 소유하고 있는 모양새(같은 생명주기)
class CPU:
pass
class RAM:
pass
class Computer: # Computer가 실행될때 CPU와 RAM도 실행된다.
def __init__(self):
self.cpu = CPU()
self.ram = RAM()
통합(Aggregation)(HAS-A)
- 합성과 비슷하나 조건부 소유
- 같은 생명주기를 갖지 않음(약한 관계)
class Gun:
def __init__(self, kind):
self.kind = kind
def bang(self):
print('bang bang!')
class Police:
def __init__(self):
self.gun = None
def acquire_gun(self, gun): # 총을 얻는다면 Gun 클래스를 호출
self.gun = gun
def release_gun(self): # 총을 반납한다면 Gun 클래스 반환
gun = self.gun
self.gun = None
return gun
def shoot(self):
if self.gun: # 총이 있다면 Gun 클래스를 호출
self.gun.bang()
else:
print("Unable to shoot")
'파이썬 > 3. 객체지향 프로그래밍' 카테고리의 다른 글
파이썬 연산자 오버로딩(operator overloading) (0) | 2020.04.28 |
---|---|
파이썬 메서드 오버라이딩(Method Overriding)과 다형성(Polymorphism) (0) | 2020.04.28 |
파이썬 캡슐화와 정보은닉 (0) | 2020.04.28 |
파이썬 클래스, 멤버, 메서드 (0) | 2020.04.28 |
파이썬 객체지향 프로그래밍 (0) | 2020.04.28 |