Python对象注意点
文章目錄
- 私有實現
- name mangling 名字改編,名字重整實現私有(在變量名前面加兩個下劃線即可實現)
- 碼農實現私有
- python內部實現私有措施
- 上述例子訪問:
- 類,類對象和實例對象
- 解釋:
- 屬性和方法名相同,進行覆蓋操作
- self參與有無區別:
- 無self
- 綁定
私有實現
name mangling 名字改編,名字重整實現私有(在變量名前面加兩個下劃線即可實現)
class Name:__name="瑞彪"def getname(self):return self.__namename=Name() print(name.getname())print(name._Name__name)#_類名__變量名碼農實現私有
只需要在變量前面加兩下劃線就行
python內部實現私有措施
解釋:python實現私有,就直接把變量名直接修改,變量名未知,那么就沒法進行訪問。name mangling措施類變量修改后為_類名__變量名
上述例子訪問:
print(name._Name__name) print(name.__name)類,類對象和實例對象
class C:count=0 a=C() b=C() a.count+=10 C.count+=100 print(a.count) print(b.count)解釋:
當這里進行實例對象的改變后,就把原來對象進行覆蓋處理,所以類對象+100這個操作,在實例對象上面并未進行
類中定義的屬性都是靜態屬性
屬性和方法名相同,進行覆蓋操作
class C:def x(self):print("X-man") c=C() c.x() C.x=1 c.x()self參與有無區別:
無self
class C:def printC():print("no zuo no die") C.printC() cc=C() cc.printC()
C.printC()執行成功這個不用解釋了,cc.printC()執行報錯,是因為實例對象進行調用函數的時候,會默認傳入一個對象參數,相當于這樣cc.printC(cc),但是對象函數里面形參為空,參數無法對應
加進self形參后,那么就實例對象調用就可以成功,但是類對象調用函數就沒法成功,因為類對象調用函數不會自動傳參,在實參里面假如一個cc或者C就可以了
綁定
class CC():def setXy(self,x,y):self.x=xself.y=ydef print(self):print(self.x,self.y) dd=CC() print(dd.__dict__) print(CC.__dict__) dd.setXy(5,6) print(dd.__dict__)
用__dict__查看對象所擁有的屬性,因為實例對象并未進行任何操作,所以查看實例對象屬性為空,但是類對象的話,里面包含很多東西,比如setXy方法,print方法,都是我們自定義的
當我們進行實例對象的屬性初始化后,再來進行查看實例對象所擁有的屬性,然后就變成了這樣:
{'x': 5, 'y': 6}這兩個屬性僅屬于實例對象,和類對象并無關,我們再次查看類對象屬性,看是否有這兩個
{'__module__': '__main__', 'setXy': <function CC.setXy at 0x000001BDC8F3C5E8>, 'print': <function CC.print at 0x000001BDC8F3C828>, '__dict__': <attribute '__dict__' of 'CC' objects>, '__weakref__': <attribute '__weakref__' of 'CC' objects>, '__doc__': None}實例對象和類對象屬性關系并不大,存放的內存也是分隔開來的
del CC ee=CC()
執行del類對象后,然后進行再進行實例對象的創建,就不能進行創建操作了。那能不能進行其它函數調用呢?
類中定義的屬性是靜態變量,方法也一樣,就算類對象被刪除了,它們依然在內存中
總結
以上是生活随笔為你收集整理的Python对象注意点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python可变参数记录
- 下一篇: 位运算符实现加法和乘法