首页 > 解决方案 > 类成员函数

问题描述

假设我有一个类,有一个不经常使用的成员函数,但它的定义很长

class foo:
    # ...
    fn():
        print('This function is called rarely but its definition is quite lengthy')
    # ...

在 may 程序中的某个时刻,我想创建数百万个 foo 类的实例,并且我希望它占用尽可能少的内存空间。冗长的函数 fn 是否也以某种方式复制了一百万次?在这种情况下,最好定义一个我将实例作为输入的外部函数。如果它没有被复制一百万次,我宁愿将其保留为成员函数。

标签: pythonclassmemory

解决方案


实例方法实际上是类的成员。当 Python 解释器看到类似 的结构obj.method(params, ...)时,它(或多或少)将其翻译为(obj.__class__).method(obj, params, ...). 它在类中查找一个method成员,obj并在添加(引用)对象本身之后调用它。

TL/DR:方法不会复制到实例对象中,因此您可以安全地将冗长的函数用作方法。


推荐阅读