我有一个“blackbox”python模块,我想扩展它。该模块提供了一个类class Foo
,没有__init__
函数,以及一个助手函数FooMaker
,它返回类型为Foo
的对象。扩展模块的常用策略:
class ExtendedFoo(blackbox.Foo):
def __init__(self, x):
super(ExtendedFoo, self).__init__(x)
在这里不起作用,因为如上所述,我需要依赖blackbox.FooMaker
而不是Foo
的__init__
函数。你知道吗
关于如何扩展模块blackbox
有什么想法吗?你知道吗
这应该与您的解决方案相同,但要短一点:
原来
Foo
类有一个setter函数,所以最终对我起作用的是答案是在澄清之前写的,模块是用Cython编写的,而不是Python。以下仅适用于Python模块。你知道吗
除非模块进行了严重的黑客攻击,否则您可以替换其成员。请注意,所有引用和赋值都作用于
blackbox.
名称,而不是本地名称!你知道吗如果希望新类
__init__
在FooMaker
内部运行,只需继承并替换Foo
。你知道吗这样,
FooMaker
将只实例化ExtendedFoo
的类。你知道吗或者,您可以用自己的版本替换
FooMaker
。你知道吗对第二个模块的限制是,如果另一个模块执行
from blackbox import FooMaker
之类的操作,那么您的模块必须先运行/导入。否则,另一个模块仍然可以看到原始工厂,类似于您仍然拥有_bbfoomaker
。你知道吗相关问题 更多 >
编程相关推荐