본문 바로가기
Python

[Python] 객체(Object)와 클래스(Class) 사용법

by 개폰지밥 2022. 9. 26.
반응형

데이터 분석을 위한 파이썬 철저 입문 보면서 공부

| 객체와 클래스

- 객체 : 변수와 함수의 묶음

예를 들어 객체가 사람이면 이름, , 몸무게는 변수로 구현, 뛰기, 걷기, 방향 전환, 정지등은 함수로 구현한다.

- 클래스 : 객체의 공통된 속성과 행위를 변수와 함수로 정의한 것입니다.

예를 들어 붕어빵 틀은 클래스, 이 틀로 만들어진 붕어빵은 객체라고 할 수 있습니다.

또한 같은 붕어빵 틀에서 나왔지만 안에 내용물에 따라 팥, 슈크림, 피자 붕어빵이 되고 이것은 객체의 속성을 규정한 변수에 무슨 값을 할당하느냐에 따라 객체의 속성이 달라집니다.

- 메서드 : 객체를 생성한 후 이용할 떄는 메서드(method)라고 합니다. 하지만 객체 생성과 상관없이 클래스에서 정의한 함수를 메서드라고 하기도 합니다.

 

| 클래스 선언 구조

class 클래스명 ():
           변수1
           ...
def 함수1(self[, 인자1, 인자2, ..., 인자 n]): # 클래스 함수
           코드 블록
           ...

 

# 객체 생성

객체명 = 클래스명()

 

# 객체에 속성 설정

객체명.변수명 = 속성값

 

# 속성 가져오기

객체명.변수명

 

# 객체의 메서드 호출

객체명.메서드명([인자1, 인자2, ...., 인자n])

 

| 객체 생성 및 활용

  - 자전거의 속성: wheel_size, color

  - 동작: move, turn, stop

 

| 클래스 선언

객체 생성 -> 주소값이 할당되어 있다.

속성 설정

클래스에 함수 추가

class Bicycle():
    def move(self, speed):
        print(speed)
    def turn(self, direction):
        print(direction)
    def stop(self):
        print(self.wheel_size, self.color)

 

| 객체 생성 및 활용

| 객체 초기화

초기화 함수 __init__()를 구현하면 객체를 생성하는 것과 동시에 속성값을 지정할 수 있습니다.

class Bicycle():
   
    def __init__(self, wheel_size, color):
        self.wheel_size = wheel_size
        self.color = color
       
    def move(self, speed):
        print(speed)
       
    def turn(self, direction):
        print(direction)
       
    def stop(self):
        print(self.wheel_size, self.color)

 

클래스에서 사용하는 변수

   1) 클래스 변수 : 클래스 내에 있지만 함수 밖에서 변수명 = 데이터형식으로 선언하며, ‘클래스명.데이터형식으로 접근하고, 클래스에서 생성한 모든 객체가 공통으로 사용할 수 있다.

   2)  인스턴스 변수 : 클래스 내의 함수에서 ‘self.변수명= 데이터 형식으로 정의했고 클래스 내의 모든 함수에서 ‘self.변수명으로 접근할 수 있습니다.

 

클래스에서 사용하는 함수

인스턴스 메서드, 정적 메서드, 클래스 메서드가 있습니다.

인스턴스 메서드 : 각 객체에서 개별적으로 동작하는 함수

인스턴스 메서드는 함수를 정의할 때 첫 인자로 self가 필요하다. self는 클래스의 인스턴스(객체) 자신을 가리킨다.

인스턴스 메서드 안에서는 ‘self.함수명()’ 형식으로 클래스 내의 다른 함수를 호출할 수 있습니다.

 

정적 메서드 : 클래스 안에 두기는 하지만 독립적으로 동작하는 함수 만들고 싶을 때 이용하는 함수. self를 사용하지 않고, 정적 메서드 안에서는 인스턴스 메서드나 인스턴스 변수에 접근할 수 없다.

함수 앞에 데코레이터 @staticmethod를 선언해 정적 메서드임을 표시한다.

 

| 정적 메서드 구조

class 클래스명():
           @staticmethod
           def 함수([인자1,......, 인자n]):
                     코드블록

 

| 메서드 호출 방법

클래스명.메서드명(인자1, ..., 인자n):

 

| 클래스 메서드

클래스 변수를 사용하기 위한 함수입니다. 함수를 정의할 떄 첫번쨰 인자로 클래스를 넘겨 받는 cls가 필요하며 이를 이용해 클래스 변수에 접근합니다.

함수 앞에 데코레이터인 @classmethod를 지정해야 합니다.

class 클래스명():
           @classmethod
def 함수명(cls[, 인자1, ..., 인자n]):
                     코드블록

 

클래스명.메서드명([인자1, ...., 인자n]): 으로 바로 호출할 수 있습니다.

 

# Car class
class Car():
    # 클래스 변수
    instance_count = 0
   
    # 초기화(instance) 메서드
    def __init__(self, size, color):
        self.size = size
        self.color = color
        Car.instance_count=Car.instance_count + 1
   
    def move(self, speed):
        print(speed)
   
    # static 메서드
    @staticmethod
    def check_type(model_code):
        if(model_code>=20):
            print("전기차")
        elif(10<=model_code<20):
            print("가솔린")
        else:
            print("디젤")
    # class 메서드
    @classmethod
    def count_instance(cls):
        print("자동차 갯수 : {0}".format(cls.instance_count))
Car.count_instance()
 
car1 = Car("small", "green")
Car.count_instance()
 
car2 = Car("small", "white")
Car.count_instance()

 

| 객체와 클래스를 사용하는 이유

큰 프로그램을 만들때는 코드 작성과 관리가 편하기 때문에

# Car class
class Car():
    # 클래스 변수
    instance_count = 0
   
    # 초기화(instance) 메서드
    def __init__(self, size, color):
        self.size = size
        self.color = color
        Car.instance_count=Car.instance_count + 1
   
    def move(self, speed):
        print(speed)
   
    # static 메서드
    @staticmethod
    def check_type(model_code):
        if(model_code>=20):
            print("전기차")
        elif(10<=model_code<20):
            print("가솔린")
        else:
            print("디젤")
    # class 메서드
    @classmethod
    def count_instance(cls):
        print("자동차 갯수 : {0}".format(cls.instance_count))

 

Car.count_instance()
 
car1 = Car("small", "green")
Car.count_instance()
 
car2 = Car("small", "white")
Car.count_instance()

 

| 클래스 상속

이미 만들어진 클래스의 변수와 함수를 그대로 이어받고 새로운 내용만 추가해서 클래스를 선언 가능하고 이것은 상속이라고 합니다. 부모 클래스는 슈퍼클래스, 자식 클래스는 하위 클래스 혹은 서브 클래스라고 합니다.

부모클래스에서 상속받는 자식 클래스를 선언하는 형식

class 자식 클래스 이름(부모 클래스 이름):
           코드블록

 

| 호출방법

부모_클래스_이름.함수명()으로 호출하거나 super().함수명()을 사용합니다.

이것은 초기화 함수 __init__()에서 많이 이용합니다.

 

부모 클래스인 자전거 클래스를 상속받은 자전거 클래스 만들기

# 부모 클래스
class Bicycle():
    def __init__(self, wheel_size, color):
        self.wheel_size = wheel_size
        self.color=color
   
    def move(self, speed):
        print(speed)
   
    def turn(self, direction):
        print(direction)
   
    def stop(self):
        print(self.wheel_size, self.color)

 

# 자식클래스

class FoldingBicycle(Bicycle):
   
    def __init__(self, wheel_size, color, state):
        Bicycle.__init__(self, wheel_size, color)
        self.state = state # 새로 추가한 변수
    def fold(self):
        self.state = 'folding'
        print(self.state)
    def unfold(self):
        self.state = 'unfolding'
        print(self.state)

 

folding_bicycle = FoldingBicycle(28, 'black', 'unfolding')
 
folding_bicycle.move(20)
folding_bicycle.fold()
folding_bicycle.unfold()

 

FoldignBicycle 클래스에서는 move()를 구현하지 않았지만 부모 클래스에서 상속 받았으므로 사용할 수 있었다.

 

반응형

댓글