본문 바로가기
파이썬

파이썬에서 변수 인수 (kwargs)에서 클래스 속성을 설정하는 방법

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

가변 개수의 인수를 취한 다음 조건부로 클래스 속성으로 설정하는 생성자 (또는 다른 함수)가있는 클래스가 있다고 가정합니다.

수동으로 설정할 수 있지만 파이썬에서는 변수 매개 변수가 충분히 일반적이므로이를 수행하기위한 공통 관용구가 있어야합니다. 그러나 이것을 동적으로 수행하는 방법을 모르겠습니다.

eval을 사용하는 예가 있지만 거의 안전하지 않습니다. 이 작업을 수행하는 적절한 방법을 알고 싶습니다. 아마도 람다로?

class Foo:
    def setAllManually(self, a=None, b=None, c=None):
        if a!=None: 
            self.a = a
        if b!=None:
            self.b = b
        if c!=None:
            self.c = c
    def setAllWithEval(self, **kwargs):
        for key in **kwargs:
            if kwargs[param] != None
                eval("self." + key + "=" + kwargs[param])

 

해결 방법

 

키워드 인수를 사용하여 __ dict __ 속성 (사전 형식의 클래스 속성을 나타냄)을 업데이트 할 수 있습니다.

class Bar(object):
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)

그러면 다음을 수행 할 수 있습니다.

>>> bar = Bar(a=1, b=2)
>>> bar.a
1

그리고 다음과 같이 :

allowed_keys = {'a', 'b', 'c'}
self.__dict__.update((k, v) for k, v in kwargs.items() if k in allowed_keys)

키를 미리 필터링 할 수 있습니다 (Python 2.x를 계속 사용하는 경우 items 대신 iteritems 사용).

 

참조 페이지 https://stackoverflow.com/questions/8187082

 

 

반응형

댓글