我正在构建一个python模块,但不知何故被卡住了。我想让一些特性成为可选的,也就是说,如果它们被禁用了,它们就不在那里了(即使不是方法)。
我的模块由C和Python部分组成;我在#ifdefs中搜索Python,因为如果C中的一个特性被禁用,那么就不应该安装与Python相关的东西。
有什么建议吗?
发布于 2013-12-05 22:05:46
至少没有这样的东西,因为它在C中工作。
相反,我会推荐你做这样的事情:
extras setup.py中定义一些您想要支持的“可插拔”功能(例如,.某种插件,...)使用setuptools的entry points并将特性拆分到多个包中。然后,只安装您需要的包。发布于 2013-12-05 22:19:41
它与任何其他类型的if语句没有太大不同。问题是,函数定义(不仅仅是声明)实际上就像任何其他代码一样,所以你可以这样做(复制到一个单独的文件并作为模块导入):
X = 1
class A(object):
def __init__(self):
pass
def funcA(self):
return 'A'
if X == 0:
def funcB(self):
return 'B'
# then at console, if above is called 'modtest.py'...
import modtest
a = modtest.A()
a.<tab>
a.funcA
# Now change the above to say X = 0, and
reload(modtest)
a2 = modtest.A()
a2.<tab>
a2.funcA a2.funcBif X == 0实际上决定了python是否会运行定义函数的代码。请注意,这是在模块导入时完成的-您不能‘动态’更改X,并获得一些带有funcB的A类和一些没有的A类;在定义类时,它只检查X一次,然后从那时起只传递回它已经解析的类A。
https://stackoverflow.com/questions/20401878
复制相似问题