我有以下模块:
cat.py:
DEFAULT_SOUND='meow'
def make_sound(sound=DEFAULT_SOUND):
print(sound)
animal.py
import cat
def sound():
cat.make_sound()
我需要打电话给animal.sound
,但我希望猫发出不同的声音。我尝试过:
import animal
# Change the sound
import cat
cat.DEFAULT_SOUND='nyan'
animal.sound()
,但是不起作用(输出为meow
)。回顾一下,如果默认值是在Python处理cat.py时从DEFAULT_SOUND的值设置的,这并不奇怪。
猫有办法发出不同的声音吗? animal.py
和cat.py
都不能被我编辑,尽管我可以要求他们的维护者进行更改。
animal.sound
实际上是几个嵌套的调用,并且无法更改所有嵌套的调用以传递声音。
答案 0 :(得分:3)
您可以从partial
模块使用functools
函数。
Here是文档。
返回一个新的部分对象,该对象在被调用时的行为类似于func 用位置参数args和关键字参数调用 关键字。
from functools import partial
import animal
import cat
cat.make_sound = partial(cat.make_sound, sound='nyan')
animal.sound()
nyan