반응형
가변 개수의 인수를 취한 다음 조건부로 클래스 속성으로 설정하는 생성자 (또는 다른 함수)가있는 클래스가 있다고 가정합니다.
수동으로 설정할 수 있지만 파이썬에서는 변수 매개 변수가 충분히 일반적이므로이를 수행하기위한 공통 관용구가 있어야합니다. 그러나 이것을 동적으로 수행하는 방법을 모르겠습니다.
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
반응형
'파이썬' 카테고리의 다른 글
파이썬 클래스 조롱 : Mock () 또는 patch ()? (0) | 2020.09.24 |
---|---|
파이썬의 2 차원 배열 (0) | 2020.09.24 |
파이썬 반복기 변수없이 Python for range 루프를 구현할 수 있습니까? (0) | 2020.09.24 |
파이썬 중첩 목록 파이썬 (0) | 2020.09.24 |
파이썬 Python 2.7 .pyc 디 컴파일 (0) | 2020.09.24 |
댓글