Python—如何覆盖类之前的功能';是由其他模块导入的吗?

Python—如何覆盖类之前的功能';是由其他模块导入的吗?,python,Python,我有一个类正在导入到module_x中进行实例化,但首先我想覆盖该类的一个方法以动态地包含一个特定的特性(在加载module_x之前运行的一些中间件中)。因为每个python类实际上都是一个字典(不仅仅是对象!) 通过将类方法与新函数关联,可以轻松地重写它们 class A: def f(self): return 5 a = A() a.f() #5 A.f = lambda self: 10 a.f() #10 在大多数情况下,修饰符和适当的OO设计会对您起作用

我有一个类正在导入到
module_x
中进行实例化,但首先我想覆盖该类的一个方法以动态地包含一个特定的特性(在加载
module_x
之前运行的一些中间件中)。

因为每个python类实际上都是一个字典(不仅仅是对象!)
通过将类方法与新函数关联,可以轻松地重写它们

class A:
    def f(self):
        return 5

a = A()
a.f() #5

A.f = lambda self: 10
a.f() #10

在大多数情况下,修饰符和适当的OO设计会对您起作用,如果您被迫重写类方法,可能会出错。

您应该知道每个类类型(如
类C中的C:…
)是一个对象,因此您可以简单地覆盖类方法。只要实例不覆盖它们自己的方法(不会经常发生,因为这对单个实例并不真正有用),每个实例都使用从其类类型继承的方法。这样,您甚至可以在创建实例后替换方法

例如:

class C:
    def m(self):
        print "original"

c1 = C()
c1.m() # prints "original"

def replacement(self):
    print "replaced!"

C.m = replacement

c1.m() # prints "replaced!"
C().m() # prints "replaced!"

AndiDog和Andrew的答案都不能完全回答您的问题。但他们提供了最重要的工具来解决您的问题(+1对2)。我将在回答中使用他们的建议之一:

您将需要3个文件:

文件1:myClass.py 文件2:importer.py 文件3:module_x.py 模块_x的输出将打印“我喜欢pi”


希望这有助于

在其模块体中实例化类吗?在函数中实例化类吗?@Andi,没有。它是在稍后的模块中实例化的。我没有在进行修改的模块中实例化类。我知道如何向对象添加内容,但不会向类添加内容(没有
使用add_to_class()
因为我在更改,而不是修改)。@orokusaki:我的答案显示了如何更改类方法。我不明白您想要实现什么,请提供一个示例(其中包括“更改”和“修改”两个词之间的区别)。
class C:
    def func(self):
        #do something
from myClass import *
def changeFunc():
    A = C()
    A.func = lambda : "I like pi"
    return A

if __name__ == "importer":
    A = changeFunc()
from importer import *
print A.func()