类成员函数

时间:2019-03-13 09:43:06

标签: python class memory

说我有一些类,它的成员函数不经常使用,但是其定义很长

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

在类级别声明的方法在所有实例之间共享,就像类变量一样,因此您不必担心实例化更多实例时方法会占用更多内存。