일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 반복문
- 인수
- 데이터사이언티스트
- 기초
- if
- 마이닝
- for
- 시각화
- Pycharm
- 파이썬
- urllib
- 코딩교육
- Beautifulsoup
- Def
- mysql
- 입문
- Loop
- 파이썬3.5
- 텍스트마이닝
- 프로그래밍
- 크롤링
- 함수
- 데이터
- 클린코드
- CRAWL
- Python
- 텍스트
- 매개변수
- 조건문
- Request
- Today
- Total
IT is Smart
Inheritance II, 상속의 응용 본문
앞에서 알아본 상속의 기초에 이어서
이번 장에서는 상속을 좀더 그럴싸 하게 응용하는 시도를 해보겠습니다.
부모 클래스가 되는 Man class에 속성을 추가하고 Java의 생성자에 해당하는 __init__() 메소드를 사용해 보겠습니다.
class Man(object):
name = ''
age = 1
def __init__(self, name, age):
self.name = name
self.age = age
print('Hi, my name is ' + self.name + '.')
print('I am ' + str(self.age))
def walk(self):
print('I am walking.')
def run(self):
print('I am running.')
Man 클래스명을 선언한 바로 아래에 name과 age라는 변수를 추가했습니다.
변수명에서 추측할 수 있듯이
name은 Man클래스의 인스턴스별로 구별해주는 이름값을 저장하는 변수로 사용하고,
age는 해당 개체의 나이 속성값을 저장하는 용도로 사용합니다.
그리고 __init__() 메소드를 선언하는데 __init__() 메소드는 클래스의 인스턴스가 생성이 될 때 자동으로 호출되는 메소드로 파이썬 언어 자체에 정의되어 있는 메소드입니다.
__init__() 메소드를 선언하는 방식은 '__init__(self, 변수1, 변수2, ..., 변수n)'와 같이 작성하면 됩니다.
__init__(self, 까지는 필수로 작성해야 하고 변수는 0..n까지 필요없으면 안 쓰도 되고 필요한 만큼 쓸 수도 있습니다.
__init__ 아래줄의 self.name은 class Man(object): 아래줄의 name을 의미하는 것이고, self.age도 마찬가지입니다.
self.name = name에서 오른쪽의 name은 __init__() 메소드 선언부에 작성한 name을 가리킵니다. age도 마찬가지입니다.
이렇게 Man 클래스만 추가 코딩을 하고, Superman 클래스는 아무런 수정을 하지 않은 상태에서 개체를 생성하고 실행해보겠습니다.
# Man은 걷고 달릴 수 있다
man = Man('Conan', 12)
man.walk()
man.run()
# Superman은 parent class인 Man으로부터 모든 기능을 물려받았고, 자신만의 능력도 가지고 있다
superman = Superman('Clark',28)
superman.walk()
superman.run()
superman.fly()
앞 장에서 man = Man()으로 개체를 생성하던 부분이 man = Man('Conan', 12)와 같이 변경되었습니다.
이는 __init__() 메소드에서 선언한 매개변수 중에서 self를 제외한 나머지 변수에 각각 매칭됩니다.
name = 'Conan'
age = 12
와 같은 의미가 됩니다.
superman 개체도 동일하게 superman = Superman('Clark', 28)와 같이 수정해줍니다.
실행결과가 아래와 같습니다.
C:\Python\Python35\python.exe C:/Python/workplace/Tutorial/inheritance.py
Hi, my name is Conan.
I am 12
I am walking.
I am running.
Hi, my name is Clark.
I am 28
I am walking.
I am running.
I am flying.
Process finished with exit code 0
보시다시피 필요한 기능을 Man 클래스에만 적용을 해주면 Man 클래스를 상속받는 Superman 클래스도 동일하게 적용받는 것을 알 수 있었습니다.
상속을 잘 활용을 하면 매우 스마트한 코드를 만들 수 있겠습니다.
'Programming > Python Pro' 카테고리의 다른 글
파이썬으로 MySQL DB에 데이터 저장하기, Python handles transactions with MySQL (5) | 2016.09.07 |
---|---|
Basic of Inheritance, 상속의 기초 (0) | 2016.08.27 |