반응형
현재 모듈에서 setattr()을 어떻게 호출합니까?
첫 번째 매개 변수 "로 전달할 항목"object본분을 다하여setattr(object, name, value)현재 모듈에 변수를 설정하시겠습니까?
예:
setattr(object, "SOME_CONSTANT", 42);
다음과 같은 효과 제공:
SOME_CONSTANT = 42
이 라인을 포함하는 모듈 내에서(올바른 라인 포함)object).
모듈 수준에서 동적으로 여러 값을 생성합니다. 정의할 수 없습니다.__getattr__모듈 레벨에서, 이것은 제 예비 부품입니다.
import sys
thismodule = sys.modules[__name__]
setattr(thismodule, name, value)
또는 사용하지 않고setattr(문제의 문자는 깨지지만 실질적인 목적은 동일함;-):
globals()[name] = value
참고: 모듈 범위에서 후자는 다음과 같습니다.
vars()[name] = value
이것은 조금 더 간결하지만, 함수 내에서 작동하지 않습니다.vars()호출된 범위의 변수를 제공합니다. 전역 범위에서 호출되었을 때 모듈의 변수를 사용하고 R/W를 사용해도 괜찮지만 함수에서 호출되었을 때 함수의 변수를 R/O로 처리해야 합니다. 파이썬 온라인 문서는 이 특정한 구별에 대해 약간 혼란스러울 수 있습니다.
Python 3.7에서는__getattr__모듈 레벨(관련 답변)에서 확인할 수 있습니다.
PEP 562에 따라:
def __getattr__(name):
if name == "SOME_CONSTANT":
return 42
raise AttributeError(f"module {__name__} has no attribute {name}")
모듈 내에서 모듈 범위 변수를 설정해야 하는 경우, 어떤 문제가 있습니까?global?
# my_module.py
def define_module_scoped_variables():
global a, b, c
a, b, c = 'a', ['b'], 3
따라서:
>>> import my_module
>>> my_module.define_module_scoped_variables()
>>> a
NameError: name 'a' is not defined
>>> my_module.a
'a'
>>> my_module.b
['b']
- 넌 그러지 않을 거다.당신은 할 것입니다.
globals()["SOME_CONSTANT"] = 42 - 넌 그러지 않을 거다.동적으로 생성된 콘텐츠는 모듈이 아닌 다른 곳에 저장할 수 있습니다.
언급URL : https://stackoverflow.com/questions/2933470/how-do-i-call-setattr-on-the-current-module
반응형
'codememo' 카테고리의 다른 글
| 오류: 'closure' 유형의 개체가 하위 집합 테이블이 아닙니다. (0) | 2023.06.07 |
|---|---|
| K&R2 1장에서 가장 긴 줄 예제를 컴파일할 때 "etline 유형 충돌" 오류가 발생하는 이유는 무엇입니까? (0) | 2023.06.07 |
| 파이썬으로 된 n그램, 4, 5, 6그램? (0) | 2023.06.07 |
| iOS 애플리케이션용 UI 레이블의 왼쪽 상단 정렬을 설정하는 방법은 무엇입니까? (0) | 2023.06.07 |
| 하위 테마 CSS가 상위 항목을 재정의하지 않음 (0) | 2023.06.07 |