修改计算机属性中的内存大小_Python 类属性的动态特点
#編程教育#
Python是一門動態語言,所以它的屬性都是在程序運行過程中動態引入的。一個類實例占用的內存大小也是動態變化的。這點和編譯性語言是完全不同的。例如C++是一門編譯性語言,它在程序運行之前需要經歷編譯階段,那么一個類實例的內存大小在編譯期間就已經確定下來了,并不會在運行期動態變化。下面我們通過一個簡單的例子,來講解一下python類屬性的動態特點。
1. class base:2. def __init__(self):3. self.__age = 234. def setHeight(self, height):5. self._height = height6. def getHeight(self):7. return self._height8. base_instance = base()9. base_instance.setHeight(194)10.base_instance.name = 'hello'程序運行到第8行,base類實例內存結構
程序運行到第9行,base類實例內存結構
程序運行到第10行,base類實例內存結構
上例中,第8行創建base實例,此時base實例內存中只有self.__age這個屬性,并沒有其他屬性,因為這個屬性在類的構造函數__init__定義了,所以在實例生成之時,該屬性也就被初始化了,自然也就包含在內存中了。接下來,當運行第9行時,setHeight()函數被調用,self_height屬性被初始化,此時base實例內存中才新增加了_height屬性。這里__age, _height都是protected屬性,因為其屬性名稱前有下劃線。其中__age更特殊一些,它前面有兩條下劃線,這是python語言實現私有成員的一種方式,針對雙下劃線的屬性,在運行時會被轉化成(_className__attributeName)的格式,避免外部通過“.”操作符來直接獲取屬性值。當程序運行到第10行后,base實例內存中又增加了公有的name屬性,這個屬性在類定義中并沒有,而是在類外部定義的,在類實例生成之后,通過點操作符“.”來給類實例動態添加屬性。當然我們并不鼓勵最后這種做法,應為它并不符合類封裝性的要求。但是從這些特點,我們確實可以看出python作為動態語言的靈活性。
這就是Python作為動態語言的一個特性,它的內存管理更加靈活。當然也有相應的缺點,就是它不能像C++語言那樣,在編譯期間就能檢查出程序錯誤,只有程序運行之后才能發現錯誤。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的修改计算机属性中的内存大小_Python 类属性的动态特点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 想买一辆油气两用的房车,谁知道有什么品牌
- 下一篇: 哈弗f5i炫怎么连接carplay?