본문 바로가기

개발하자

파이썬에서 작동하는 특성 모듈을 어떻게 얻을 수 있나요?

반응형

파이썬에서 작동하는 특성 모듈을 어떻게 얻을 수 있나요?

다음 예제를 실행합니다:

from attrdict import AttrDict

a = AttrDict({'foo': 'bar'})
print(a.foo)

하지만 다음 오류가 발생했습니다:

어떻게 해결해야 하나요? 나는 그것이 벌레 같아요. 파일 내부를 살펴보니 파일에 몇 가지 문제가 있었습니다:

:




이 프로젝트는 파이썬 3.10으로의 이동 변경으로 인해 중단되었지만 2019년에 비활성으로 표시된 이후로 이 문제는 수정되지 않았다.

나는 A를 찾았지만 그런 일은 없었던 것 같다. 다른 방법을 찾아야 할 것 같아요, 확인해 보세요.




수집 모듈을 다른 곳으로 가져오기 전에 앱 시작 부분 근처에 원숭이 패치를 적용할 수 있습니다.

# Monkey patch collections
import collections
import collections.abc
for type_name in collections.abc.__all__:
    setattr(collections, type_name, getattr(collections.abc, type_name))



나는 적당한 대안을 찾고 있었지만 찾을 수 없었다. 저는 AttrDict 프로젝트의 포크를 만들었습니다. 코드 리팩터링을 수행했고 프로젝트의 모든 측면을 철저히 테스트했습니다. 또한 포크된 프로젝트가 3.8에서 최신 버전인 파이썬 3.11까지 파이썬 버전과 완벽하게 호환되도록 보장했습니다. 만약 당신이 대안이 필요하다면, 당신은 이 패키지를 사용할 수 있습니다.




필요한 것이 몇 줄의 코드로 고유 속성을 만들 수 있습니다:

from collections import UserDict

class AttrDict(UserDict):
    def __getattr__(self, key):
        return self.__getitem__(self, key)
    def __setattr__(self, key, value):
        if key == "data":
            return super().__setattr__(key, value)
        return self.__setitem__(key, value)

그리고 당신은 끝났어요. ("데이터"라는 속성은 UserDict에서 내부적으로 사용되기 때문에 작동하지 않습니다. 정말로 필요하다면 몇 줄의 추가 작업이 필요합니다.)


반응형