重新定义导入函数的默认参数

时间:2014-11-18 04:47:09

标签: python svg

我正在使用一个代码(除其他外)生成我创建的几何体的svg文件。

给定输入脚本my-geometry.py,代码的结构如下:

python pre.py my-geometry

在pre.py中称为另一个模块:

from render import *
[...] some other code
execfile(script, globals()) #script=my-geometry

render.py本身导入另一个模块

from svg_render import *
[...]
svg = SvgEnvironment(x,y,title='a',desc='b')
svg.text(x_mid, y_mid, blk.label, anchor="middle")
[...]

其中SvgEnvironmentsvg_render中定义的类。该类的text方法定义为:

def text(self, x, y, textString, angle=0.0, fontSize=10,
         anchor="start", colour="black",
         fontFamily="sanserif")

我的问题是:如何从fontSize修改/覆盖my-geometry.py的默认值? (我想做的是修改它写入svg的所有文本的fontsize而不用修改源代码)

我看了this question,但似乎不符合我的情况。

1 个答案:

答案 0 :(得分:1)

您可以使用Monkey Patch或覆盖功能。

Monkey Patch

#File: render.py

from svg_render import SvgEnvironment

def modified_text(self, x, y, textString, angle=0.0, fontSize=<change size>,
         anchor="start", colour="black",
         fontFamily="sanserif")


SvgEnvironment.text = modified_text

这将取代整个功能,当它使用时,它将获得新的默认值。

替换

#File: render.py

from svg_render import SvgEnvironment

class MySvgEnvironment(SvgEnvironment):
    def text(self, x, y, textString, angle=0.0, fontSize=<change size>,
         anchor="start", colour="black",
         fontFamily="sanserif")



...
...
svg = MySvgEnvironment(x,y,title='a',desc='b')
svg.text(x_mid, y_mid, blk.label, anchor="middle")
...
...