본문 바로가기
파이썬

파이썬 인스턴스 멤버의 기본 인수 값을 메서드에 전달하는 방법은 무엇입니까?

by º기록 2020. 9. 25.
반응형

인스턴스의 속성 값을 사용하여 기본 인수를 인스턴스 메서드에 전달하고 싶습니다.

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

 

 

반응형

댓글