class와 상속 그리고 메서드 오버라이딩에 대해 배워보자
class는 파이썬의 대부분의 기능을 제작해서 사용되고 있다
정수형 int도 type을 살펴보면 class로 선언되어 있다
그렇게 만들어진 class를 상속받거나 오버라이딩 하면 더욱 간결한
코딩이 가능하다
class의 선언과 구조
class Human:
def __init__(self,age,name):
self._age=age
self._name=name
def __repr__(self):
return "제 나이는 : {}살이고 이름은 : {}입니다.".format(self._age, self._name)
cheolsu=Human(22,"kimcheolsu")
print(cheolsu)
>>> 제 나이는 : 22살이고 이름은 : kimcheolsu입니다.
위 코드는 간단한 클래스를 구현한 것이고 클래스의 이름은 Human이다
내부에 존재하는 함수들은 method 함수 ,static 함수 등 용도에 따라 다양한 이름으로 불리우며
method 들은 용도에 따라 instatnce method 혹은 class method로 분류된다
이미 제작되어 있는 libray class들을 사용해서 그 기능을 그대로 사용할 수도 있고
새로운 method를 제작해서 나만의 클래스를 만들어 사용할 수도 있다.
그럼 클래스의 구조에 대해 간략히 알아보자
위 __init__ 메서드는 초기화 메서드(initialize)고 클래스가 사용될 경우 첫번째로 자동 호출되어
클래스의 정보를 초기화 하는 역할을 한다
self라는 매개 변수는 클래스 내부 속성의 인스턴스 역할이며 self를 통하여
내부 메서드와 속성에 접근함과 사용할 수 있다
__init__메서드에서 클래스의 정보중 age와 name을 받은 후 초기화 해주고
__repr__메서드 (표현 메서드) 에서 age와 name의 값을 return 해줄건데
cheolsu 라는 객체를 하나 생성해서 출력하면 표현메서드 __repr__의 리턴값이 출력된다.
비슷한 기능으로 __str__메서드도 존재하는데
__str__ 와 __repr__메서드의 차이점은 개발자를 위한 표현식과 사용자를 위한 표현식이라는 차이점이 존재한다.
Class 상속받아 사용하기
class Human:
def __init__(self,age,name):
self._age=age
self._name=name
def __repr__(self):
return "제 나이는 : {}살이고 이름은 : {}입니다.".format(self._age, self._name)
class Man(Human):
def __init__(self,name,age,tall):
super().__init__(name,age)
self._tall=tall
man1=Man("cheolsu",22,172.5)
print(man1)
>>> 제 나이는 : cheolsu살이고 이름은 : 22입니다.
위 코드는 클래스가 두개 만들어져 있고 Human클래스를 상속받은 Man클래스를 통해 man1이라는 객체를 생성해서
출력한 코드다 Man의 코드를 살펴보면 __init__생성자에서 super()라는 코드를 찾아볼 수 있는데
이는 Man이 Human클래스를 상속받은 자식 클래스라는걸 알 수 있고 Human 클래스는 Man의 부모 클래스가 된다
클래스 선언부에서 class Man(상속받을 클래스)로 선언한 다음
super()를 통해 __init__메서드의 즉 Human클래스의 name과 age변수의 사용권한도 받아와서 사용할 수 있게 된다
Man자체에는 출력기능이 없지만 Human클래스의 __repr__메서드를 상속받았기에 사용할 수 있다
Class - 메서드 오버라이딩 method overriding
class Human:
def __init__(self,age,name):
self._age=age
self._name=name
def __repr__(self): #부모 클래스의 메서드
return "제 나이는 : {}살이고 이름은 : {}입니다.".format(self._age, self._name)
class Man(Human):
def __init__(self,name,age,tall):
super().__init__(name,age)
self._tall=tall
def __repr__(self): #부모 클래스의 메서드를 상속받아 오버라이딩 한 새로운 메서드
return "제 나이는 : {}살이고 이름은 : {}이며 키는 : {}cm입니다".format(self._age, self._name,self._tall)
man1=Man("cheolsu",22,172.5)
print(man1)
>>> 제 나이는 : cheolsu살이고 이름은 : 22이며 키는 : 172.5cm입니다
메서드 오버라이딩은 상속받은 클래스의 기능을 추가하거나 삭제하여 덧씌워 사용한다
아까 상속부분에서 __repr__기능이 구현되지 않은 Man클래스의 객체를 출력했을때
Human클래스의 __repr__메서드를 통해 출력이 가능했지만 지금 코드에서 Man은 Human과는 다르게 하나의 변수를 더 입력받기에
출력해야할 정보를 3개로 늘린 새로운 __repr__메서드를 오버라이딩 해서 사용하게된다.
'개발&코딩 > Python' 카테고리의 다른 글
[Python] - list 자료형에 대한 기초 (0) | 2020.09.08 |
---|---|
[Python] - 문자열을 더 편리하게 관리하는 함수들 split,join,replace,count,find (0) | 2020.09.08 |
[Python] - 문자열 그리고 입출력 기초 (0) | 2020.09.08 |
[Python] - Class 심화 Python 객체 지향 프로그래밍(OOP) // 파이썬 중급 (0) | 2020.08.12 |
Python 기초 예제(자료형 예제) 모음 - 1 (ver1.0) (0) | 2020.08.10 |
댓글