我正在创建一个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?
你担心什么性能?记忆?属性访问?你需要更清楚地定义你的参数。你知道吗
方法只是另一种类型的属性;如果实例没有定义属性,则通过实例查找类对象。查找现有实例属性实际上不受类*上可用属性的影响。你知道吗
因为方法是类的属性,所以内存性能实际上不受它们的影响;您可以有1000或10000个实例,并且类上仍然只有一个方法。你知道吗
如果您关心内存性能,那么应该对对象使用slots。插槽也不会加快属性访问速度,它们只会节省内存占用。你知道吗
总结一下:
方法不会影响实例的属性查找性能。
instance.latitude
访问不会更快或更慢,因为类有一个额外的方法。方法不会影响内存性能;类对象持有方法,而不是实例。如果您担心内存占用,请使用
__slots__
作为属性。从技术上讲,Python在查找属性时总是在类上查找数据描述符。因为类属性是由字典支持的,所以平均来说,这是一个O(1)常量时间查找。您必须创建一个灾难性的哈希冲突链才能影响性能。有关详细信息,请参见descriptor howto。
相关问题 更多 >
编程相关推荐