7

如果我有一个具有多个功能的类:

class Example:

    def func1(self):
        print 'Hi1'
    def func2(self):
        print 'Hi2'
    def func3(self):
        print 'Hi3'

如果我创建了多个“示例”实例,每个实例是否都在类中存储自己的函数副本?或者 Python 是否有一种聪明的方法来只存储一次定义并在每次实例使用类中的函数时查找它?

另外,静态函数呢?该类是否只保留每个静态函数的一份副本?

4

2 回答 2

15

实例化类时,不会创建新的函数对象,无论是实例方法还是静态方法。通过 访问实例方法时obj.func1,会创建一个称为“绑定方法”的新包装对象,该对象只会在需要时保留。包装器对象是轻量级的,基本上包含一个指向底层函数对象和实例的指针(在self调用函数时作为参数传递)。

请注意,staticmethod在 Python 中使用几乎总是一个错误。它的存在归功于一个历史错误。如果您认为需要静态方法,通常需要模块级函数。

于 2012-08-13T17:46:00.657 回答
0

这些函数“存储”在类中,包括静态和非静态的。

于 2012-08-13T17:46:22.997 回答