我有一个带有常量(数据类型和其他东西)的模块。在
让我们呼叫模块常量.py在
假设它包含以下内容:
# noinspection PyClassHasNoInit
class SimpleTypes:
INT = 'INT'
BOOL = 'BOOL'
DOUBLE = 'DOUBLE'
# noinspection PyClassHasNoInit
class ComplexTypes:
LIST = 'LIST'
MAP = 'MAP'
SET = 'SET'
这很不错,工作也很好,带有检查功能的ide可以在编写代码时提供建议,这非常有帮助。PyCharm示例如下:
但是,如果我现在有一个某种类型的值,并且想检查它是否在complexType中,而不在另一个地方定义它们呢。这有可能吗?在
为了进一步澄清,我想做些类似的事情:
^{pr2}$当然,如果我用constants模块中的所有类型创建一个“ComplexTypeList”列表,这当然是可能的,但是每次我都要向两个位置添加新类型(类和列表),是否可以动态地执行某些操作?在
我希望它能在Python2.7中工作,不过关于如何在python的更高版本中实现这一点的建议也是非常有用的。在
解决方案意见:
我使用了inspect,正如Prune在下面标记的解决方案中建议的那样。我把上面提到的名单列在常量.py模块组件:
ComplexTypeList = [m[1] for m in inspect.getmembers(ComplexTypes) if not m[0].startswith('_')]
这样就可以做上面的例子了。在
如果我正确地理解了这个问题,您需要定义一个自定义
type
。您不需要真正导入任何模块。有很多方法可以做到这一点,例如元类,但是,一个简单的方法如下:现在可以测试类型:
^{pr2}$返回:
换句话说:
返回
True
dir(class)将返回给定类的所有属性。因此,if语句可以是
if myVar in dir(constants.ComplexTypes):
我想我有了。你可以使用inspect.getmembers返回模块中的项目。每个项目都是一个元组(name,value)。我用下面的代码试过了。dir只给出模块成员的名称;getmembers也返回值。您可以在每个元组的第二个元素中查找所需的值。在
在常量.py在
测试代码
^{pr2}$输出:
您可以使用各种is运算符请求特定类型的对象,例如
得到函数。是的,你可以用这样一个简单的软件包来删除东西。我看不出一种方法能让你得到一个正的常数。见documentation。在
相关问题 更多 >
编程相关推荐