2014-05-12 3 views
2

파일에 많은 속성을 가진 수백 개의 클래스가 있습니다. 특정 클래스에 대해 사용 가능한 다른 속성이 무엇인지 사용자에게 알려주고 싶습니다. 내 주요 목표는 자동 완료를 지원하는 것입니다. 그렇지 않으면 다른 클래스에 어떤 속성이 있는지를 사용자가 알기가 매우 어렵습니다.많은 메모리를 사용하여 enum으로 클래스 정의하기

나는 유사하게 우리가 속성의 백으로 클래스의 hundread이

class abc: 
    AA = "aa" 
    BB = "bb" 
    CC = "cc" 

class def: 
DD ="dd" 
EE = "ee" 
FF = "ff" 

로 수업을 파일 constant.py 있습니다. 이렇게하면 사용자가 abc.AA, def.DD로 사용할 수 있지만이 방법은 많은 메모리를 소비합니다. 파일 크기는 약 11MB이지만, 가져 오기를 할 때 가져 오기 상수는 약 50MB의 메모리를 사용합니다.

메모리 사용량을 최소화하기 위해 더 좋은 방법이 있습니까?

+2

실제로 11MB 또는 원본 데이터에 대해 50MB의 메모리가 필요합니다. 메모리의 데이터에는 오버 헤드가 있으므로 빠른 검색 등을 할 수 있습니다. 나는 생각하지 않습니다. 상황을 많이 개선 할 수있는 큰 기회가 될 것입니다. –

+0

디자인에 문제가있는 경우이 방법으로 데이터베이스를 사용할 수 있습니다. 열거 형을 위해 많은 양의 데이터를 메모리에 저장하는 것은 좋지 않습니다. – pylover

+0

데이터베이스를 사용하십시오. –

답변

1

이것은 클래스를 잘 사용하는 것처럼 들리지 않습니다. collections.namedtuple 더 나은 내기, 그리고 더 효율적일 수 있습니다.

클래스 버전에 필요한 메모리를 줄이는 한 가지 방법은 __slots__입니다.

class ABC: 
    __slots__=('aa', 'bb', 'cc) 
+0

IHMO 이것은 여전히 ​​설계상의 문제이며 OP는 아마도 응용 프로그램 데이터 요구 사항을 데이터베이스로 옮기는 것에 대해 생각할 수 있습니다. –

+0

Daniel, 인스턴스 변수에 __slots__이 사용 된 것 같습니다. 클래스 변수에도 사용할 수 있습니까 ?? – ragupta

+0

실제로 속성에 데이터를 저장해야합니까? 나는 당신의 질문에서 단지 자동 완성을위한 속성 이름을 제공하는 것이라고 이해했다. 그렇지 않은가요? –

0

상수를 모듈로 나누고 파일 당 관련 클래스를 그룹화하십시오. 그런 다음 사용자는 필요한 하위 집합을 가져올 수 있으며 나머지는 리소스를 낭비하지 않습니다.

관련 문제