我喜欢bash中很酷的可能性,它允许我覆盖功能。为了提高平台兼容性,我想将相同的功能移植到python中,但我不知道它是如何完成的。这些脚本演示了bash中的函数覆盖:
mycoolscript.sh:
#!/bin/bash
function myCoolFunc() {
echo "Executing default implementation of myCoolFunc"
}
somevar="hello"
customfile="./${1}.sh"
if [ -e "${customfile}" ]; then
source "${customfile}"
fi
myCoolFunc
echo "current value of 'somevar:' ${somevar}"
foo.sh:
function myCoolFunc() {
somevar="modified!"
echo "Executing custom implementation of myCoolFunc"
}
执行不带任何参数的主脚本:
$ ./mycoolscript.sh
Executing default implementation of myCoolFunc
current value of 'somevar:' hello
使用' foo'执行主脚本作为论点:
$ ./mycoolscript.sh foo
Executing custom implementation of myCoolFunc
current value of 'somevar:' modified!
导入的脚本可能包含也可能不包含该功能的覆盖,它是可选的。另外,请注意覆盖函数如何修改主脚本中声明的变量。
如何在python中实现相同的功能?
答案 0 :(得分:0)
您可以通过使用自己的实现覆盖现有方法定义来实现类似的功能,例如:
>>> import math
>>> old_sin = math.sin
>>> def new_sin(radians):
... print "someone called sin"
... return old_sin(radians)
...
>>> math.sin = new_sin
>>> math.sin(10)
someone called sin
-0.5440211108893699
您当然可以对自己的文件执行相同操作和/或仅在收到特殊参数时才使用它:
<强> lib.py 强>
def func(a):
return a
<强> test.py 强>
import sys
import lib
def myfunc(a):
return a + 1
if __name__ == '__main__':
if len(sys.argv) > 1 and sys.argv[1] == 'foo':
lib.func = myfunc
print(lib.func(1))
<强>输出强>
>>> python test.py
1
>>> python test.py foo
2