向python中加载的类/模块添加方法

2024-04-28 19:37:19 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有

import mynewclass

我能给我的新类添加一些方法吗?在概念上类似如下:

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

mynewclass.newmethod = newmethod

(我正在使用CPython 2.6)


Tags: 方法importself概念returndefcpython新类
2条回答

在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. 在对象内部查找new_method

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

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

  4. 这个绑定方法是由obj.new_method返回的,然后由于这行代码的结尾()而最终调用它。

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

是的,如果是Python类型的话。除了你在课堂上做,而不是在模块/包上。

相关问题 更多 >