programing

NameError: '자체' 이름이 정의되지 않았습니다.

stoneblock 2023. 7. 18. 21:29

NameError: '자체' 이름이 정의되지 않았습니다.

왜 그런 구조가

class A:
    def __init__(self, a):
        self.a = a

    def p(self, b=self.a):
        print b

오류를 표시합니다.NameError: name 'self' is not defined?

기본 인수 값은 함수 정의 시간에 평가되지만,self함수 호출 시에만 사용할 수 있는 인수입니다.따라서 인수 목록의 인수는 서로 참조할 수 없습니다.

인수를 기본값으로 설정하는 것이 일반적인 패턴입니다.None코드로 테스트를 추가합니다.

def p(self, b=None):
    if b is None:
        b = self.a
    print b

업데이트 2022: Python 개발자들은 현재 향후 Python 버전에 대한 늦은 바운드 인수 기본값을 고려하고 있습니다.

'b'를 '없음'으로 설정하는 옵션도 원하는 경우:

def p(self, **kwargs):
    b = kwargs.get('b', self.a)
    print b

A self NameError메서드 서명 내부에서 자신을 정의하지 못한 경우에도 발생할 수 있습니다.이 오류는 일반적으로 다음과 같이 나타납니다.TypeError예상 인수와 주어진 인수 사이에 불일치가 있기 때문입니다[1].그러나 변수 개수의 인수를 수락하는 경우self될 것이다arg[0]그리고 변수.self정의되지 않습니다.

최소한의 예.

class Obj:
    def foo(*args):
        print(self.bar)

>NameError: 이름 'self'가 정의되지 않았습니다.

수정:

class Obj:
    def baz(self, *args):
        print(self.bar)

[1] http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html

언급URL : https://stackoverflow.com/questions/1802971/nameerror-name-self-is-not-defined