Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에 1개의 필수 위치 인수가 누락됨:'self' 솔루션

Python 클래스는 해당 메서드에 액세스하기 전에 인스턴스화하거나 호출해야 합니다. 클래스의 개체를 인스턴스화하는 것을 잊어버리고 클래스 메서드에 액세스하려고 하면 "필수 위치 인수 1개 누락:'self'"라는 오류가 발생합니다.

이 가이드에서는 이 오류의 의미와 발생 이유에 대해 설명합니다. 이 오류를 수정하는 방법을 배우는 데 도움이 되도록 작동 중인 이 오류의 예를 살펴봅니다.

1 필수 위치 인수 누락:'self'

위치 인수는 함수에 전달되는 데이터를 나타냅니다. 클래스에서 모든 함수에는 "self" 값이 지정되어야 합니다. "self"의 값은 JavaScript의 "this"와 유사합니다. "self"는 클래스의 객체에 저장된 데이터를 나타냅니다.

먼저 해당 클래스의 개체를 인스턴스화하지 않고 클래스 메서드를 호출하면 오류가 발생합니다. "self"는 객체가 인스턴스화될 때까지 가치가 없기 때문입니다.

"누락된 1개의 필수 위치 인수:'자체'" 오류를 일으키는 가장 일반적인 실수는 다음과 같습니다.

  • 클래스의 개체를 인스턴스화하는 것을 잊어버림
  • 잘못된 구문을 사용하여 클래스 인스턴스화

이러한 각 원인을 개별적으로 살펴보겠습니다.

원인 #1:개체 인스턴스화를 잊어버림

클래스의 메서드에 액세스하려면 먼저 개체를 인스턴스화해야 합니다.

비디오 게임에서 영웅에 대한 정보를 저장하는 클래스 정의:

참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.

부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.

class Hero:
	def __init__(self, name, player_type):
		self.name = name
		self.player_type = player_type

다음으로 클래스에 함수를 추가합니다. 클래스 내부의 함수를 메소드라고 합니다. 이 메소드는 플레이어의 이름과 플레이어 유형을 출력합니다:

def show_player(self):
		print("Player Name: " + self.name)
		print("Player Type: " + self.player_type)

플레이어를 생성할 수 있도록 클래스에 액세스하십시오.

luke = Hero.show_player()

"luke" 변수에 할당된 개체를 만들었습니다. 이 개체는 Hero 클래스에서 파생됩니다. show_player()를 호출합니다. 플레이어에 대한 정보를 표시하는 메서드입니다.

코드를 모두 실행하고 어떤 일이 발생하는지 살펴보겠습니다.

Traceback (most recent call last):
  File "main.py", line 10, in <module>
	luke = Hero.show_player()
TypeError: show_player() missing 1 required positional argument: 'self'

우리의 코드는 실패합니다. Hero의 객체를 인스턴스화하지 않았기 때문입니다. Hero.show_player() 정보를 표시할 수 있는 영웅을 생성하지 않았기 때문에 작동하지 않습니다.

이 오류를 해결하기 위해 먼저 show_player()를 호출하기 전에 객체를 인스턴스화합니다. :

luke = Hero("Luke", "Mage")
luke.show_player()

코드를 다시 실행하십시오.

Player Name: Luke
Player Type: Mage

코드가 성공적으로 실행됩니다! 우리는 먼저 Luke라는 플레이어에 대한 정보를 저장하는 "luke"라는 변수를 선언했습니다. 루크의 플레이어 유형은 "마법사"입니다. 이제 해당 개체를 인스턴스화했으므로 show_player()를 호출할 수 있습니다. 방법.

원인 #2:클래스를 잘못 인스턴스화

클래스를 잘못 인스턴스화하면 "필수 위치 인수 1개 누락:'self'" 오류가 발생할 수 있습니다. 다음 코드를 고려하십시오.

luke = Hero
luke.show_player()

이 코드는 마지막 예제의 솔루션과 유사하지만 올바르지 않습니다. Hero 뒤에 괄호를 추가하지 않았기 때문입니다. 이 괄호가 없으면 프로그램은 클래스를 인스턴스화하려는 것을 알지 못합니다.

Hero 뒤에 괄호를 추가하고 필수 인수인 "name" 및 "player_type"을 지정하여 이 문제를 해결하십시오.

luke = Hero("Luke", "Mage")
luke.show_player()

이제 코드가 성공적으로 실행되고 플레이어에 대한 정보가 반환됩니다.

Player Name: Luke
Player Type: Mage

결론

"missing 1 required positional argument:'self'" 오류는 클래스 메서드를 호출하기 전에 클래스의 개체를 인스턴스화하지 않으면 발생합니다. 이 오류는 클래스를 잘못 인스턴스화하는 경우에도 발생합니다.

이 오류를 해결하려면 해당 클래스의 메서드에 액세스하기 전에 먼저 해당 클래스의 개체를 인스턴스화해야 합니다. 그런 다음 올바른 구문을 사용하여 개체를 인스턴스화하는지 확인하십시오.

이제 전문 Python 개발자처럼 이 일반적인 오류를 해결할 준비가 되었습니다!