IT is Smart

Inheritance II, 상속의 응용 본문

Programming/Python Pro

Inheritance II, 상속의 응용

달인최선 2016. 8. 27. 16:02
반응형

앞에서 알아본 상속의 기초에 이어서

이번 장에서는 상속을 좀더 그럴싸 하게 응용하는 시도를 해보겠습니다.


부모 클래스가 되는 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 클래스도 동일하게 적용받는 것을 알 수 있었습니다.


상속을 잘 활용을 하면 매우 스마트한 코드를 만들 수 있겠습니다.



반응형