我有一个我要导入的模块。可以说它的名字是 module1.py 。 该模块内部有一个功能(F(X,Y))。以下是该模块的一部分:
def F(X,Y):
S=complex(X,Y)
Fs=2/(pow(S,3))
Rfs=real(Fs)
return Rfs
Sum=F(X,0)/2.
print Sum
我可以通过以下方式导入此模块:
import module1
但我导入后需要在F函数中更改一些内容。例如,我想在模块中用旧函数替换此函数(我想在F函数中更改Fs):
def F(X,Y):
S=complex(X,Y)
Fs=1/(S-1)
Rfs=real(Fs)
return Rfs
你能告诉我如何在python 2.7中做到这一点吗?
答案 0 :(得分:1)
您可以通过扩展Module1
来实现此目的。扩展类允许您保留基类的所有先前函数和属性,但覆盖您想要更改的任何函数和属性。
此示例显示您可以调用原始Module1
内的所有其他函数,但是当您调用F()
函数时,它会使用扩展类中的函数。
Module1.py
class Module1():
def F(self,X,Y):
S=complex(X,Y)
Fs=2/(pow(S,3))
Rfs=real(Fs)
return Rfs
def G(self):
return "function G"
def H(self):
return "function H"
Module1_ext.py
import Module1
class Module1(Module1.Module1):
def F(self,X,Y):
return X*Y;
run.py
from Module1_ext import Module1
mod = Module1()
print(mod.G())
print(mod.H())
print(mod.F(2,3))
Module1.py
class Module1():
def F(X,Y):
S=complex(X,Y)
Fs=2/(pow(S,3))
Rfs=real(Fs)
return Rfs
def G():
return "function G"
def H():
return "function H"
Module1_ext.py
import Module1
class Module1(Module1.Module1):
def F(X,Y):
return X*Y;
run.py
from Module1_ext import Module1
print(Module1.G())
print(Module1.H())
print(Module1.F(2,3))
答案 1 :(得分:0)
最后我自己想出来了。这就是我解决问题的方法: 首先,我们需要以这种形式重写模块:
module1.py
from numpy import *
M = 11
SU = zeros(M + 2)
C = zeros(M + 1)
C[0] = 1
for k in range(1, M + 1):
C[k] = (M - (k - 1)) * C[k - 1] / k
# T=input("TIME=")
class BB:
def F(self, fnRf):
T=1
A = 19.1
U = exp(A / 2.) / T
X = A / (2. * T)
H = pi / T
Ntr = 15
Sum = fnRf(X, 0) / 2.
for N in range(1, Ntr + 1):
Y = N * H
Sum += (-1) ** N * fnRf(X, Y)
SU[0] = Sum
for K in range(1, M + 2):
N = Ntr + K
Y = N * H
SU[K] = SU[K - 1] + (-1) ** N * fnRf(X, Y)
Avgsu = 0.
Avgsu1 = 0.
for J in range(M + 1):
Avgsu += C[J] * SU[J]
Avgsu1 += C[J] * SU[J + 1]
Fun = U * Avgsu / 2048
Fun1 = U * Avgsu1 / 2048
print Fun1
我们可以像这样导入这个模块:
from module1 import *
def fnRf(X, Y):
S = complex(X, Y)
Fs = 1. / (S-1)
Rfs = real(Fs)
return Rfs
ss=BB()
ss.F(fnRf)
这样我们可以灵活地定义函数(在模块中)。现在它完美无缺。我希望它有所帮助。