반응형
인스턴스의 속성 값을 사용하여 기본 인수를 인스턴스 메서드에 전달하고 싶습니다.
class C:
def __init__(self, format):
self.format = format
def process(self, formatting=self.format):
print(formatting)
시도 할 때 다음과 같은 오류 메시지가 나타납니다.
NameError: name 'self' is not defined
방법이 다음과 같이 작동하기를 원합니다.
C("abc").process() # prints "abc"
C("abc").process("xyz") # prints "xyz"
여기서 문제는 무엇이며 왜 작동하지 않습니까? 어떻게이 작업을 수행 할 수 있습니까?
해결 방법
인스턴스가 존재하기 전에 메서드가 정의 될 때 기본값이 평가되기 때문에 이것을 기본값으로 정의 할 수 없습니다. 일반적인 패턴은 대신 다음과 같이하는 것입니다.
class C:
def __init__(self, format):
self.format = format
def process(self, formatting=None):
if formatting is None:
formatting = self.format
print(formatting)
self.format
은 formatting
이 None
인 경우에만 사용됩니다.
기본값이 작동하는 방식을 설명하려면 다음 예를 참조하십시오.
def mk_default():
print("mk_default has been called!")
def myfun(foo=mk_default()):
print("myfun has been called.")
print("about to test functions")
myfun("testing")
myfun("testing again")
그리고 여기에 출력 :
mk_default has been called!
about to test functions
myfun has been called.
myfun has been called.
mk_default
가 어떻게 한 번만 호출되었는지, 그리고 함수가 호출되기 전에 이런 일이 발생했는지 주목하세요!
참조 페이지 https://stackoverflow.com/questions/8131942
반응형
'파이썬' 카테고리의 다른 글
파이썬 Python의 bz2 모듈은 기본적으로 컴파일되지 않습니다. (0) | 2020.09.25 |
---|---|
파이썬 matplotlib 3d 플롯 종횡비를 설정 하시겠습니까? (0) | 2020.09.25 |
파이썬 날짜 시간의 월, 일, 연도에 Mongodb 쿼리 (0) | 2020.09.25 |
파이썬 URL에서 이스케이프 된 문자 디코딩 (0) | 2020.09.25 |
파이썬 Python Paramiko에서 명령을 실행 한 후 어떻게 결과를 저장할 수 있습니까? (0) | 2020.09.25 |
댓글