프로그래밍
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에서 처음 출판되었습니다.
댓글