본문 바로가기

프로그래밍 언어/AI & 파이썬_Python

파이썬 Python 코딩_12_상속

상속(Inheritance)

 

상속은 클래스에서 약간 수정한 추가 클래스를 만들때 사용한다.

 

실제로 만들어 보면서 상속이 무엇인지 확인한다.

앞에서 만든 Person클래스와 파생된(관계있는) 클래스를 만들어보자.

 

Person이 '사람'이라는 뜻이므로 추가 클래스는 Police(경찰)과 Coder(프로그래머)를 만들어 본다. 

추가 클래스를 만들때 Person클래스를 상속받기 위해서는 다음과 같이 만든다.

 

Police라는 클래스를 만들때 괄호 안에 Person을 적으면 Person클래스를 상속(inheritance)받는다는 뜻이다.

Police클래스에서 사용할 함수도 하나 만들어 보자.

 

arrest(체포)라는 함수를 만들고 매개변수(파라미터)는 self와 target(목표,대상)을 만들었다.

실행할 내용은 target의 값을 가져와서 "당신을 체포한다, target"을 출력한다.

 

Person클래스를 상속받는 Coder라는 클래스도 하나 만든다.

 

이 클래스에서 사용할 함수는 coding이며 매개변수는 self와 project(프로젝트)를 만들었다.

이 함수의 실행할 내용은 project라는 매개변수의 값을 가져와서 "이번에 만들 프로젝트: project"를 출력하는 것이다.

 

이렇게 만든 코드는 다음과 같다.

이제 인스턴스(객체)를 만들어 보자.

각 클래스로 만든 생성자 함수를 인스턴스(객체)에 저장한다.

 

인스턴스 wraven은 Person클래스로 생성자 함수를 만들었고, jenny는 Police클래스, wonie는 Coder클래스로 생성자 함수를 만들었다.

 

이제 만든 인스턴스(객체)로 각 클래스에 있는 함수를 호출해 본다.

인스턴스jenny는 Police클래스로 만들었지만 say_hello()함수를 호출할 수 있다.

왜냐하면 Police클래스는 Person클래스를 상속받았기 때문에 Person클래스에 있는 함수를 사용할 수 있는 것이다.

 

위와 같이 상속을 받으면 Police클래스 안에 Person클래스에 있는 함수를 중복하지 않아도 된다.

아래와 같이 인스턴스 jenny와 wonie는 각자의 함수를 당연히 호출할 수 있다.

 

하지만 인스턴스 wraven이나 jenny는 다른 클래스의 함수를 호출할 수 없다.

상속받지 않았기 때문이다.

wraven으로 coding 속성을 호출해 보자.

위와 같은 에러가 뜰것이다.

AttributeError(속성 에러): Person객체는 coding 속성없다.

 

다른 인스턴스로 다른 속성을 호출해도 마찬가지다.

 

상속은 여기까지.