누구나 pydev가 코드 완성을 위해 사용할 것을 결정하는 방법을 알고 있습니까? 코드 완성을 가능하게하는 일련의 클래스를 정의하려고합니다. __dict__
및 __slots__
을 설정하기 위해 __new__
을 사용해 보았지만 둘 다 pydev 자동 완성에 나열되지 않은 것 같습니다.이클립스의 pydev는 어떻게 코드 완성을합니까?
자동 완성 목록에 나열하려는 열거 집합이 있지만 생성자로 설정하고 싶습니다. 각 클래스마다 열거하지 마십시오.
그래서 오히려
class TypeA(object):
ValOk = 1
ValSomethingSpecificToThisClassWentWrong = 4
def __call__(self):
return 42
보다 내가
def TYPE_GEN(name, val, enums={}):
def call(self):
return val
dct = {}
dct["__call__"] = call
dct['__slots__'] = enums.keys()
for k, v in enums.items():
dct[k] = v
return type(name,(), dct)
TypeA = TYPE_GEN("TypeA",42,{"ValOk":1,"ValSomethingSpecificToThisClassWentWrong":4})
내가 처리를 돕기 위해 무엇을 할 수있는 그런 짓을하고 싶습니다?
편집 : 의견은 내가하는 일에 대해 질문하는 것 같습니다. 다시 말하지만, 내가하고있는 것의 큰 부분은 코드 완성입니다. 저는 다양한 마이크로 컨트롤러와 통신하기 위해 프로토콜에 바인딩하는 파이썬을 사용하고 있습니다. 변경할 수있는 각 매개 변수 (수 백 가지가 있음)는 개념적으로 이름이 있지만, 프로토콜을 통해 사실상 무작위 인 ID를 사용해야합니다. 많은 매개 변수는 개념적으로 명명 된 값을 받아들이지 만 다시 정수로 나타냅니다. 따라서 enum.
라이브러리에 파이썬 모듈을 자동 생성하려고하므로 그룹은 오류가 발생하기 쉬운 숫자 대신 이름을 사용하여 변경하려는 것을 지정할 수 있습니다. __call__
속성은 매개 변수의 id를 반환하고 열거 형은 매개 변수의 허용 값입니다.
예, 각 클래스의 자세한 버전을 생성 할 수 있습니다. 포인트가 자동 완성되어 각 클래스에 대해 한 줄씩 더 명확 해 보였습니다.
즉석에서 클래스를 생성 할 필요가 없습니다. 또한 실시간으로 클래스를 생성하는 것은 자동 완성과 호환되지 않을 수도 있습니다. – user2357112
이름을 하드 코딩하지 않으려면 왜 묻겠습니까? 문자열의'dict'에서 enum 값을 생성하면 어떤 이점이 있습니까? – jpmc26
저는 pydev가 얼마나 똑똑한 지 모르지만 메타 클래스를 통해 enum을 정의 해 볼 수는 있습니다. – martineau