Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python类中方法的数量会影响性能吗?_Python_Performance_Class_Methods - Fatal编程技术网

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

python类中方法的数量会影响性能吗?,python,performance,class,methods,Python,Performance,Class,Methods,我正在创建一个Python类来表示一个地理位置。它的主要目标是存储纬度、经度、海拔,因此它的使用将非常类似于C#“struct”,一种在运行时应该有大量实例的值类型 我正在考虑向该类添加一些方法(\uu str\uu就是其中之一),我想知道向类添加方法是否会对性能产生任何影响 我感兴趣的绩效指标如下: 对象创建开销 内存开销(创建大量实例时) 即使在不调用“额外方法”的情况下,类的操作速度也是如此 例如,我了解到\uuuuu slots\uuuuuuuuuuuuuuuuuuuuuuuuuu在

我正在创建一个Python类来表示一个地理位置。它的主要目标是存储
纬度、经度、海拔
,因此它的使用将非常类似于C#“struct”,一种在运行时应该有大量实例的值类型

我正在考虑向该类添加一些方法(
\uu str\uu
就是其中之一),我想知道向类添加方法是否会对性能产生任何影响

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

  • 对象创建开销
  • 内存开销(创建大量实例时)
  • 即使在不调用“额外方法”的情况下,类的操作速度也是如此
例如,我了解到
\uuuuu slots\uuuuuuuuuuuuuuuuuuuuuuuuuu
在某些上下文中很有用,因为默认情况下,
\uuuuuuuuuuuuuuuuuuuuuuuuuu dict
属性会占用每个实例上的一些空间

问题是:

如果我有一个包含大量方法的类,那么应该存在哪些影响

或者务实地说:

在一个应该是轻量级的类中添加越来越多的方法,这是我应该避免的吗


您担心的性能是什么?记忆?属性访问?您需要更清楚地定义参数

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

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

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

因此,总结一下:

  • 方法不会影响实例上的属性查找性能<代码>实例。纬度访问不会更快或更慢,因为类有一个额外的方法

  • 方法不影响记忆性能;类对象保存方法,而不是实例。如果您担心内存占用,请对属性使用
    \uuuuuu插槽



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

谢谢,我编辑了这个问题,顺便说一下,它涵盖了您已经指出的主题。现在谢谢你!