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
'programing' 카테고리의 다른 글
스프링 REST의 하위 리소스 (0) | 2023.07.18 |
---|---|
MongoDB에서 Mongoengine을 사용하여 문서를 삭제하는 방법은 무엇입니까? (0) | 2023.07.18 |
git pull 커밋되지 않은 로컬 변경 유지 (0) | 2023.07.18 |
Excel에서 가장 가까운 15분 간격으로 라운드 시간 (0) | 2023.07.18 |
vue가 아닌 파일에서 vue app(이) 액세스 (0) | 2023.07.18 |