蟒蛇。在基类中拥有许多方法的内存开销。

时间:2017-04-28 11:38:32

标签: python python-3.x memory subclass override

我正在为现有数据存储区开发以用户为中心的前端。

我没有在我的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 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,这会产生巨大的内存开销,更不用说有一个dict-lookup来访问其他简单的函数 - 对于上面的实例type_name_hint基本上是 const

所以我的问题是:是否有内存开销,如果有更好的方法,或者Python如何解决问题。

1 个答案:

答案 0 :(得分:2)

Python类实例基本上是实例变量的字典,加上对类本身的引用。类中定义的方法不会影响实例大小AT ALL:它们是通过类引用间接找到的。基本上,任何属性首先在实例的dict中查找,然后是类的dict,然后是超类的dict,依此类推依赖继承链。