我正在使用一个代码(除其他外)生成我创建的几何体的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")
[...]
其中SvgEnvironment
是svg_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,但似乎不符合我的情况。
答案 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")
...
...