【发布时间】:2013-08-12 02:46:31
【问题描述】:
有谁知道 pydev 如何确定使用什么来完成代码?我正在尝试定义一组专门用于启用代码完成的类。我尝试使用__new__ 设置__dict__ 和__slots__,但似乎都没有在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})
我可以做些什么来帮助处理?
编辑: cmets 似乎是在质疑我在做什么。同样,我所追求的很大一部分是代码完成。我正在使用 python 绑定到协议来与各种微控制器通信。我可以更改的每个参数(有数百个)在概念上都有一个名称,但在协议上我需要使用它的 ID,这实际上是随机的。许多参数接受在概念上命名但又由整数表示的值。因此枚举。
我正在尝试为该库自动生成一个 python 模块,因此该组可以使用名称而不是容易出错的数字来指定他们想要更改的内容。 __call__ 属性将返回参数的 id,枚举是参数的允许值。
是的,我可以生成每个类的详细版本。每种类型的一行对我来说似乎更清楚,因为重点是自动完成,而不是查看这些类。
【问题讨论】:
-
您不需要为此动态生成类。此外,动态生成类可能与自动完成不兼容。
-
请问您为什么不想对名称进行硬编码?您希望通过从字符串的
dict生成枚举值来获得什么好处? -
我不知道 pydev 有多聪明,但您可以尝试通过元类定义您的枚举。
-
如果将所有内容都放在 dict 文字中并将其传递给构造函数,与使用常规类语句相比,它的硬编码也不会少。你只会失去清晰度。
-
附带说明,将可变容器作为默认参数 (
enums={}) 是个坏主意。从函数内部对其进行的更改将在调用中持续存在。更好的是有一个默认值None并在函数内部检查它。
标签: python eclipse pydev metaclass