gpt4 book ai didi

python - 将方法添加到python中加载的类/模块

转载 作者:太空狗 更新时间:2023-10-29 17:03:03 25 4
gpt4 key购买 nike

如果我有类似的东西

import mynewclass

我可以向 mynewclass 添加一些方法吗?概念上类似于以下内容:

def newmethod(self,x):
return x + self.y

mynewclass.newmethod = newmethod

(我正在使用 CPython 2.6)

最佳答案

在 Python 中,import 语句用于模块,而不是类......所以要导入一个类,你需要类似的东西

from mymodule import MyClass

就您的问题而言,答案是肯定的。在 Python 中,类只是常规对象,类方法只是存储在对象属性中的函数。

此外,Python 中对象实例的属性是动态的(您可以在运行时添加新的对象属性),这一事实与前面的事实相结合意味着您可以在运行时向类添加新方法。

class MyClass:
def __init__(self, x):
self.x = x

...

obj = MyClass(42)

def new_method(self):
print "x attribute is", self.x

MyClass.new_method = new_method

obj.new_method()

这是如何工作的?当你打字时

obj.new_method()

Python 将执行以下操作:

  1. 在对象 obj 中寻找 new_method

  2. 如果找不到它作为实例属性,它将尝试在类对象内部查找(可作为 obj.__class__)找到函数。

    <
  3. 现在有一点小技巧,因为 Python 会注意到它找到的是一个函数,因此会将它“包装”在一个闭包中以创建所谓的“绑定(bind)方法” ”。这是必需的,因为当您调用 obj.new_method() 时,您想要调用 MyClass.new_method(obj)... 换句话说,将函数绑定(bind)到 obj 创建绑定(bind)方法是负责添加 self 参数。

  4. 这个绑定(bind)的方法就是obj.new_method返回的,然后因为那行代码结束的()所以最终会调用这个.

如果对类的搜索也没有成功,那么父类也将按特定顺序全部搜索以查找继承的方法和属性,因此事情会稍微复杂一些。

关于python - 将方法添加到python中加载的类/模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7749914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com