Python:类和内存中的函数

Squ*_*art 6 python memory function instances

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

class Example:

    def func1(self):
        print 'Hi1'
    def func2(self):
        print 'Hi2'
    def func3(self):
        print 'Hi3'
Run Code Online (Sandbox Code Playgroud)

如果我创建了几个'Example'实例,那么每个实例是否在类中存储了自己的函数副本?或者,Python是否只有一种智能方式来存储定义,并且每次实例使用类中的函数时都会查找它?

另外,静态功能呢?该类只保留每个静态函数的一个副本吗?

Sve*_*ach 13

实例化类时,不会为实例方法或静态方法创建新的函数对象.当访问实例方法时obj.func1,会创建一个名为"绑定方法"的新包装器对象,该对象将仅在需要时保留.包装器对象是轻量级的,基本上包含指向底层函数对象和实例的指针(self当调用函数时,它作为参数传递).

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