[python] class
클래스의 개념
class는 객체지향 언어에 있는 개념이다. 객체를 만들기 위한 틀로 보면 쉽다.
클래스로 만든 객체에는 중요한 특징이 있다. 바로 객체마다 고유한 성격을 가진다는 것이다.
과자 틀로 만든 과자에 구멍을 뚫거나 조금 베어 먹더라도 다른 과자에는 아무 영향이 없는 것과 마찬가지로
동일한 클래스로 만든 객체들은 서로 전혀 영향을 주지 않는다.
클래스는 다음과 같이 선언 할 수 있다.
class Car():
"""
this is Car class
"""
# 클래스 변수
car_count = 0
def __init__(self, company, details):
self._company = company
self._details = details
Car.car_count += 1
def detail_info(self):
print('Current Id : {}'.format(id(self)))
print('Car Detail Info : {} {}'.format(self._company, self._details.get('price')))
생성자
__init__ : init은 생성자를 나타낸다. 생성자는 인스턴스를 생성하면 무조건 호출되는 메서드이다. 객체에 초깃값을 설정해야 할 필요가 있을 때는 setdata와 같은 메서드를 호출하여 초깃값을 설정하기보다는 생성자를 구현하는 것이 안전한 방법이다. 예제에는 company와 details를 인자로 받아서 초기화 해주고 있다. h_car = Car('kia', 'k3')
와 같이 인자와 함께 객체 생성이 가능하다. 만약 인자가 없으면 오류가 나게 되는데 이때는 __init__(self, company='korea', details='sedan')
과 같이 인자 없이 기본값으로 사용이 가능 하다.
클래스 변수
car_count : 여기서 car_count는 클래스 변수를 나타낸다. 주의할 점이 클래스 변수는 객체들끼리 공유하는 변수이다. 따라서 객체에서 클래스변수의 값을 변경 할 경우 다른 객체의 클래스 변수 또한 바뀌게 되므로 주의해야 한다.
메서드
detail_info : class 내에 있는 함수를 메서드라고 한다. 메서드의 첫번째 인수는 항상 self가 들어오는데 이 self는 class를 나타낸다. 객체를 호출할 때 호출한 객체 자신이 전달되기 때문에 self를 사용한 것이다. 물론 self말고 다른 이름을 사용해도 상관없다.
메서드의 종류 :
Instance Method
: 기본적으로 쓰는 클래스의 메서드. 객체의 고유한 속성값을 사용한다.
Class Method
: 클래스 변수를 수정할때 사용한다.
@classmethod
def method_name(cls):
Static Method
: 비주류 메서드등을 만들때 주로 사용한다.
특별한 메서드
클래스에는 __init__
과 비슷한 특별한 메서드들이 있다.
__del__()
: 인스턴스를 삭제할 때 호출된다.
__repr__()
: 인스턴스를 print()문으로 호출할때 실행되는 메서드 이다.
그외 __add__()
, __dict__()
등등 여러 메서드들이 있다.