Python OOP:将方法放入类中效率低下?

时间:2014-08-18 13:53:14

标签: python oop

我通常使用类似于人们如何使用namedtuple(当然除了属性是可变的)。此外,我尝试将冗长的函数放在不经常实例化的类中,以帮助节省内存。

从内存的角度来看,如果期望经常实例化类,那么将函数放在类中是否效率低?撇开这是划分功能的好设计,这应该是值得担心的吗?

4 个答案:

答案 0 :(得分:6)

方法不会为您的类的实例添加任何权重。该方法本身只存在一次,并根据其运行的对象进行参数化。这就是为什么你有一个self参数。

答案 1 :(得分:2)

Python在新式类的实例中没有直接指向其方法的指针。相反,它维护一个指向父类的指针。请考虑以下示例:

class Foo:
  def bar(self):
    print 'hello'

f = Foo()
f.bar()

为了从实例f调度bar方法,需要进行两次查找。 f包含对类对象Foo的引用,而不是包含方法表的f来查找bar。 Foo包含方法表,在其中调用bar,f为第一个参数。所以f.bar()可以改写为

Foo.bar(f)

答案 2 :(得分:2)

类的实例有一个引用该类的指针;该类的所有其他功能都是唯一的,并通过该指针访问。像

这样的东西
foo.bar()

真的翻译为

foo.__class__.bar(foo)

因此,方法是属于该类的唯一且长期存在的对象,在调用时将该实例作为参数。

答案 3 :(得分:2)

每个对象都有自己的数据成员副本,而成员函数是共享的。编译器创建一个与该类的所有对象分开的成员函数的副本。该类的所有对象共享这一个副本。

OOP的重点是将数据和功能结合在一起。没有OOP,数据就无法重复使用,只能重用这些功能。