如何更改模块的功能

时间:2016-12-07 06:01:08

标签: python-2.7 function module

我有一个我要导入的模块。可以说它的名字是 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中做到这一点吗?

2 个答案:

答案 0 :(得分:1)

您可以通过扩展Module1来实现此目的。扩展类允许您保留基类的所有先前函数和属性,但覆盖您想要更改的任何函数和属性。

此示例显示您可以调用原始Module1内的所有其他函数,但是当您调用F()函数时,它会使用扩展类中的函数。

Python2.7

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))

Python3 +

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)

这样我们可以灵活地定义函数(在模块中)。现在它完美无缺。我希望它有所帮助。