python类中方法的数量会影响性能吗?

2024-04-25 14:14:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个Python类来表示地理位置。它的主要目标是存储latitude, longitude, elevation,因此它的使用将非常类似于C#“struct”,一种在运行时应该有很多实例的值类型。你知道吗

我正在考虑向该类添加一些方法(__str__就是其中之一),我想知道向类添加方法是否对性能有任何影响。你知道吗

我感兴趣的绩效指标如下:

  • 对象创建开销
  • 内存开销(创建大量实例时)
  • 即使不调用“额外方法”也能加快类的操作速度。你知道吗

例如,我了解到__slots__在某些上下文中很有用,因为默认情况下__dict__属性会占用每个实例上的一些空间。你知道吗

所以问题是:

Which impacts are supposed to exist if I have a class with a large amount of methods?

或者务实地说:

Is adding more and more methods to a class that is supposed to be lightweight something I should try to avoid for any reason?


Tags: to实例方法类型目标more地理位置struct
1条回答
网友
1楼 · 发布于 2024-04-25 14:14:04

你担心什么性能?记忆?属性访问?你需要更清楚地定义你的参数。你知道吗

方法只是另一种类型的属性;如果实例没有定义属性,则通过实例查找类对象。查找现有实例属性实际上不受类*上可用属性的影响。你知道吗

因为方法是类的属性,所以内存性能实际上不受它们的影响;您可以有1000或10000个实例,并且类上仍然只有一个方法。你知道吗

如果您关心内存性能,那么应该对对象使用slots。插槽也不会加快属性访问速度,它们只会节省内存占用。你知道吗

总结一下:

  • 方法不会影响实例的属性查找性能。instance.latitude访问不会更快或更慢,因为类有一个额外的方法。

  • 方法不会影响内存性能;类对象持有方法,而不是实例。如果您担心内存占用,请使用__slots__作为属性。


从技术上讲,Python在查找属性时总是在类上查找数据描述符。因为类属性是由字典支持的,所以平均来说,这是一个O(1)常量时间查找。您必须创建一个灾难性的哈希冲突链才能影响性能。有关详细信息,请参见descriptor howto

相关问题 更多 >

    热门问题