python一个基类中有许多方法的内存开销。
我正在为现有数据存储开发一个以用户为中心的前端 我没有在UI中使用繁琐的查找表,而是将UI“提示”附加到许多数据包装器中 例如:python一个基类中有许多方法的内存开销。,python,python-3.x,memory,subclass,overriding,Python,Python 3.x,Memory,Subclass,Overriding,我正在为现有数据存储开发一个以用户为中心的前端 我没有在UI中使用繁琐的查找表,而是将UI“提示”附加到许多数据包装器中 例如: class LibraryBook(IDatabaseItem): """There are a billion books in my library""" @property def name_hint(self): """This is a METHOD, I do not want to duplicate the
class LibraryBook(IDatabaseItem):
"""There are a billion books in my library"""
@property
def name_hint(self):
"""This is a METHOD, I do not want to duplicate the fields in a new string!"""
return self.author + " " + self.title
@staticmethod
@property
def type_name_hint():
"""This is CONSTANT, there is no point in every instance having an attribute!"""
return "Book"
. . .
(接口IDatabaseItem
只是为了使IDE中的代码更容易完成,我知道在Python中它是不必要的)
我担心的是,所有这些小方法都会产生内存开销。C++将创建一个简单的指向V表的指针,但是从我读过的python使用的<代码> DICT<代码>中,这会导致大量的内存开销,更不用说有一个DCT查找来访问其他琐碎的功能了。例如,代码> Type NythySoNo.<代码>本质上是const .< /p>
因此,我的问题是:是否存在内存开销,如果存在内存开销,更好的方法是什么,或者如果没有内存开销,Python如何解决这个问题。Python类实例基本上是实例变量的dict,加上对类本身的引用。类中定义的方法根本不影响实例大小:它们是通过类引用间接找到的。基本上,任何属性都会首先在实例的dict中查找,然后是类的dict,然后是超类的dict,依此类推继承链。Python类实例基本上是实例变量的dict,再加上对类本身的引用。类中定义的方法根本不影响实例大小:它们是通过类引用间接找到的。基本上,任何属性都会首先在实例的dict中查找,然后在继承链上查找类的dict,然后在超类的dict中查找,依此类推。为什么希望这些是方法而不是属性?如果将它们设为属性,静态属性可以是固定属性,动态属性可以是
@property
。我觉得属性会占用更多内存。e、 g.然后,示例中的每个实例都会有一个作者
和标题
的第二个完整副本,以及一个指向书籍
和书籍
的无效指针。我已经在内部使用@property
,但是,由于它们只是伪装的方法,这并不能解决我的问题。@jonrsharpe-在编辑问题:)为什么你希望这些是方法,而不是属性?如果你将它们设为属性,静态的可以是固定属性,动态的可以是@property
。我觉得属性会占用更多内存。e、 g.然后,示例中的每个实例都会有一个作者
和标题
的第二个完整副本,以及一个指向书籍
和书籍
的无效指针。我已经在内部使用@property
,但由于它们只是伪装的方法,这并不能解决我的担忧。@jonrsharpe-修正了编辑问题:)