본문 바로가기
카테고리 없음

Python에서 인스턴스 메소드란?

by it-view 2021. 12. 29.

프로그래밍

 

반응형

Python 클래스에 익숙해진다면 인스턴스 메소드라는 용어를 들어봤을 것이다.

인스턴스 메서드란 무엇입니까? 그것들을 어떻게 사용할 수 있나요?

인스턴스 메서드는 Python 클래스에 정의된 기본 메서드입니다. 클래스의 인스턴스에 액세스할 수 있기 때문에 인스턴스 메서드라고 합니다. 인스턴스 메소드를 사용하는 두 가지 방법은 인스턴스 특성을 읽거나 쓰는 것입니다. 즉, 인스턴스 메소드는 객체의 상태를 읽거나 수정하는 데 사용됩니다.

인스턴스 메소드를 이해하고 파이썬 프로그램에서 사용할 수 있도록 몇 가지 예를 살펴보겠습니다.

 

시작해 봅시다!

Python에서 인스턴스 메서드를 만드는 방법

인스턴스 메소드를 만드는 첫 번째 단계는 클래스 키워드를 사용하여 파이썬 클래스를 만드는 것입니다.

클래스 키워드를 사용하면 파이썬에서 새 클래스를 정의할 수 있습니다. 새 클래스를 정의하여 새 데이터 유형을 생성합니다.

클래스를 만들고 나면 유사한 구문을 사용하여 해당 클래스 내에서 인스턴스 메소드를 정의할 수 있습니다(def 키워드 사용).

 

우리는 Vehicle이라는 클래스와 인스턴스 메소드 부분을 만들 것입니다.

class Vehicle:
    def __init__(self, type, color):
            self.type = type
        self.color = color
    def get_description(self):
            print("This vehicle is a {} {}".format(self.color, self.type))

위의 코드에 있는 논리를 살펴보자.

  • 차량이라는 클래스를 정의합니다.
  • type과 color의 두 가지 특성을 가진 Vehicle 인스턴스를 만들 수 있는 클래스 생성자(init 메서드)를 추가합니다.
  • get_description()이라는 인스턴스 메서드를 정의합니다.

인스턴스 메서드는 항상 자신을 첫 번째 인수로 사용합니다. 자체 인수는 인스턴스 메서드가 호출되는 클래스의 인스턴스를 나타냅니다.

 

get_description() 메소드의 구현에서 알 수 있듯이, 개체의 두 가지 특성인 type과 color에 액세스하기 위해 self를 사용합니다.

그리고 인스턴스 방식으로 메시지를 인쇄하기 위해 문자열 포맷 방법을 사용합니다.

클래스에 정의하는 모든 메서드는 특정 장식자를 사용하여 Python 인터프리터에 달리 지시하지 않는 한 기본적으로 인스턴스 메서드입니다.

파이썬에서 정적 메소드나 인스턴스 메소드 같은 다른 종류의 메소드를 정의하는 방법을 설명하는 별도의 튜토리얼을 만들겠습니다.

Python에서 인스턴스 메서드를 호출하는 방법

 

클래스와 인스턴스 메소드를 정의한 후 해당 클래스의 인스턴스에서 인스턴스 메소드를 호출할 수 있습니다.

먼저 클래스의 차량 인스턴스를 만듭니다.

bus = Vehicle("bus", "blue")

차량 객체(또는 인스턴스)를 작성하기 위해 클래스 정의에서 지정한 두 가지 특성(유형 및 색상)에 대한 값을 전달했습니다.

그런 다음 인스턴스 이름과 점 표기법을 사용하여 인스턴스 메소드를 호출합니다.

 
bus.get_description()
[output]
This vehicle is a blue bus

주의할 점은…

인스턴스 메서드를 호출할 때 자체 매개 변수를 전달하지 않습니다. 인스턴스 메소드를 호출할 때 셀프가 암시적으로 전달됩니다.

따라서 인스턴스 메소드를 호출하는 올바른 구문은 다음과 같습니다.

instance.instance_method(arg1, arg2, ..., argN)
 

여기서 arg1, arg2, …, argN은 인스턴스(instance) 방법으로 전달되는 인수이다. 앞서 말한 것처럼 통과될 필요가 없다는 점을 고려하여 셀프는 제외됩니다.

인스턴스(instance) 방법에서 자신의 가치는 무엇입니까?

객체 지향 파이썬을 시작할 때 혼란스러울 수 있다는 점을 고려한 인스턴스 메소드의 자기 주장에 대해 더 말씀드리고자 합니다.

Self는 클래스의 인스턴스(객체라고도 함)를 나타내며 차량 클래스의 두 가지 방법으로 사용합니다.

  • init() 메서드: Vehicle 형식의 인스턴스를 생성하는 생성자입니다. 생성자 자체(Instance self)는 객체 생성 시 전달된 값을 기반으로 인스턴스(instance) 특성 유형 및 색상의 값을 설정하는 데 사용됩니다. 이것은 이 경우 개체의 상태를 업데이트하기 위해 자아가 사용된다는 것을 의미합니다.
  • get_description 메소드: 이것은 인스턴스(instance) 메서드이며 메시지를 인쇄할 수 있도록 인스턴스(instance) 특성 유형 및 색상의 값을 읽기 위해 self를 사용합니다. 이 경우, 사물의 상태를 읽기 위해 self를 사용한다.
 

차량 개체를 만들기 전에 다음 코드를 사용했습니다.

bus = Vehicle("bus", "blue")

동일한 방법으로 두 번째 객체를 만들 수 있습니다.

car = Vehicle("car", "red")
car.get_description()
[output]
This vehicle is a red car

이렇게 하면 생성한 모든 객체는 생성자를 통해 객체를 생성할 때 설정된 고유한 독립 상태를 가집니다.

 

자신에 대해 더 이해하기 위해 인스턴스 방법의 첫 번째 줄에 인쇄문을 추가하겠습니다.

def get_description(self):
    print(self)
    print("This vehicle is a {} {}".format(self.color, self.type))

차량 인스턴스에 대해 인스턴스(instance) 방법을 실행하면 다음과 같은 출력이 나옵니다.

<__main__.Vehicle object at 0x10430b3a0>
  This vehicle is a red car

인쇄된 명세서에 따르면 셀프는 예상대로 차량 유형의 대상입니다.

 

다른 인스턴스 메서드에서 인스턴스 메서드를 호출할 수 있습니까?

인스턴스 메소드가 동일한 클래스의 다른 인스턴스 메소드를 호출할 수 있는지 알아보겠습니다.

이전에 정의한 인스턴스 방법은 메시지를 인쇄합니다. 일반적으로 인스턴스 메소드의 목적은 객체가 특정 작업을 수행할 수 있도록 하는 것입니다.

예를 들어…

우리는 자동차의 엔진을 켜는 인스턴스(instance) 방법을 만들 수 있습니다(이 물체가 비디오 게임의 일부라고 상상해 보십시오).

 

우리 반을 다음과 같이 업데이트해 봅시다.

  • 기본적으로 False인 engine_on이라는 새로운 부울 특성을 사용하여 차량의 엔진 상태를 추적합니다.
  • 차량에 대한 설명을 인쇄하고 engine_on 특성 값을 True로 설정한 다음 메시지를 인쇄하는 turn_engine_on()이라는 새로운 인스턴스(instance) 메서드를 정의합니다.
  • class Vehicle: def __init__(self, type, color): self.type = type self.color = color self.engine_on = False def turn_engine_on(self): self.get_description() self.engine_on = True print("{} engine turned on".format(self.type.title())) def get_description(self): print("This vehicle is a {} {}".format(self.color, self.type))

새 인스턴스 메서드를 호출하여 출력이 올바른지 확인합니다.

car = Vehicle("car", "red")
car.turn_engine_on()
[output]
This vehicle is a red car
Car engine turned on
 

보시다시피 turn_engine_on() 메소드는 다음 구문을 사용하여 클래스의 다른 인스턴스 메소드를 호출합니다.

self.get_description()

동일한 클래스의 다른 인스턴스 메서드에서 인스턴스 메서드를 호출하려면 다음과 같은 일반 구문을 사용합니다.

self.instance_method(arg1, arg2, ..., argN)

참고: 보시다시피 다른 인스턴스 메서드를 호출할 때 자신을 통과할 필요가 없습니다.

 

그리고 또 하나 주목할 점은…

새로운 인스턴스 메서드 turn_engine_on()을 사용하여 부울 인스턴스 속성 engine_on의 값을 업데이트했습니다.

앞서 설명한 바와 같이 인스턴스(또는 객체)의 상태를 업데이트했습니다.

결론

이제 클래스에서 인스턴스 메소드를 사용할 수 있는 충분한 지식을 습득했습니다. 그리고 코드에 자신을 사용하는 방법도 이해해야 합니다.

 

이 튜토리얼에서는 다음 작업을 수행했습니다.

  • 인스턴스 메소드를 정의합니다.
  • 클래스 인스턴스에서 인스턴스 메서드를 호출하여 해당 상태를 읽거나 업데이트합니다.
  • 같은 클래스의 다른 인스턴스 메서드에서 인스턴스 메서드를 호출합니다.

이제 인스턴스 방법을 사용할 차례입니다.

행복한 객체 지향 코딩!

2021년 12월 28일 https://codefather.tech에서 처음 출판되었습니다.

 

댓글