class foo:
loadings = dict(hi=1)
if 'hi' in loadings:
print(loadings['hi'])
# works
print({e : loadings[e] for e in loadings})
# NameError global name 'loadings' not defined
내가뿐만 아니라 클래스 네임 스페이스를 참조하는 시도 예를하지만이 작동하지 않습니다 중 하나
class foo:
loadings = dict(hi=1)
if 'hi' in loadings:
print(loadings['hi'])
#works
print({e : foo.loadings[e] for e in foo.loadings})
#NameError: name 'foo' is not defined
그리고 물론
, 예상대로 작동합니다.class foo:
loadings = dict(hi=1)
if 'hi' in loadings:
print(loadings['hi'])
print({e : foo.loadings[e] for e in foo.loadings})
개미가 왜이 범위 문제가 발생 하는지를 이해하고, 내가 미쳐있는 일을하려고한다면 다른 방법으로 최선의 방법을 이해해야한다. 제 느낌은 첫 번째 코드 스 니프가 그대로 작동해야한다는 것입니다. 물론 그렇지 않습니다.
목표
내가 통조림 데이터베이스 쿼리와 함께 일부 CSV/JSON 파일에 대한 DataManager에 클래스/모듈을 만드는 오전, 내 프로그램 및 취득 데이터에 대한 원 스톱 상점. 정적 데이터와 일부 동적 데이터가 있으므로 같은 클래스에서 정적 및 비 정적 데이터 멤버를 많이 사용하는 것처럼 보입니다. 이것들이 모듈 수준의 변수가 될 수 있음을 알고 있지만 정적 클래스 데이터 멤버를 갖는 개념을 좋아합니다 (아마도 자바의 편견 때문에). 어떤 도움이 많이 나는 위의이
class foo:
loadings = dict(hi=1)
temp = dict()
for e in loadings:
temp[e] = loadings[e] # keep in mind this is a minimal example, I probably wouldn't do (just) this
print(temp) # works
del temp
같은 될 것으로, 클래스 범위에 머물 목록 이해력를 펼쳤다 결국
(지금은)내 솔루션을 감사합니다 그것은 아니지만, 꽤는 Name and Binding docs 당 지금
내가 그 흥미주의하는 생각 –
....'인쇄 ({K가 k, v in loadings.items()})'가 작동합니다.그래서'loadingings'은 적어도 독해력 내에서 볼 수 있습니다. – cmd
이것은 한번로드 된 클래스의 정적 데이터이므로 init 함수에서는 수행되지 않았습니다. 나는'runonce' 또는 어떤 것과 같은 깃발을 가질 수 있었지만, 클래스 수준의 코드가 이유가 있다고 보입니다. – user25064