Python对象注意点
文章目錄
- 私有實(shí)現(xiàn)
- name mangling 名字改編,名字重整實(shí)現(xiàn)私有(在變量名前面加兩個(gè)下劃線即可實(shí)現(xiàn))
- 碼農(nóng)實(shí)現(xiàn)私有
- python內(nèi)部實(shí)現(xiàn)私有措施
- 上述例子訪問:
- 類,類對(duì)象和實(shí)例對(duì)象
- 解釋:
- 屬性和方法名相同,進(jìn)行覆蓋操作
- self參與有無區(qū)別:
- 無self
- 綁定
私有實(shí)現(xiàn)
name mangling 名字改編,名字重整實(shí)現(xiàn)私有(在變量名前面加兩個(gè)下劃線即可實(shí)現(xiàn))
class Name:__name="瑞彪"def getname(self):return self.__namename=Name() print(name.getname())print(name._Name__name)#_類名__變量名碼農(nóng)實(shí)現(xiàn)私有
只需要在變量前面加兩下劃線就行
python內(nèi)部實(shí)現(xiàn)私有措施
解釋:python實(shí)現(xiàn)私有,就直接把變量名直接修改,變量名未知,那么就沒法進(jìn)行訪問。name mangling措施類變量修改后為_類名__變量名
上述例子訪問:
print(name._Name__name) print(name.__name)類,類對(duì)象和實(shí)例對(duì)象
class C:count=0 a=C() b=C() a.count+=10 C.count+=100 print(a.count) print(b.count)解釋:
當(dāng)這里進(jìn)行實(shí)例對(duì)象的改變后,就把原來對(duì)象進(jìn)行覆蓋處理,所以類對(duì)象+100這個(gè)操作,在實(shí)例對(duì)象上面并未進(jìn)行
類中定義的屬性都是靜態(tài)屬性
屬性和方法名相同,進(jìn)行覆蓋操作
class C:def x(self):print("X-man") c=C() c.x() C.x=1 c.x()self參與有無區(qū)別:
無self
class C:def printC():print("no zuo no die") C.printC() cc=C() cc.printC()
C.printC()執(zhí)行成功這個(gè)不用解釋了,cc.printC()執(zhí)行報(bào)錯(cuò),是因?yàn)閷?shí)例對(duì)象進(jìn)行調(diào)用函數(shù)的時(shí)候,會(huì)默認(rèn)傳入一個(gè)對(duì)象參數(shù),相當(dāng)于這樣cc.printC(cc),但是對(duì)象函數(shù)里面形參為空,參數(shù)無法對(duì)應(yīng)
加進(jìn)self形參后,那么就實(shí)例對(duì)象調(diào)用就可以成功,但是類對(duì)象調(diào)用函數(shù)就沒法成功,因?yàn)轭悓?duì)象調(diào)用函數(shù)不會(huì)自動(dòng)傳參,在實(shí)參里面假如一個(gè)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__查看對(duì)象所擁有的屬性,因?yàn)閷?shí)例對(duì)象并未進(jìn)行任何操作,所以查看實(shí)例對(duì)象屬性為空,但是類對(duì)象的話,里面包含很多東西,比如setXy方法,print方法,都是我們自定義的
當(dāng)我們進(jìn)行實(shí)例對(duì)象的屬性初始化后,再來進(jìn)行查看實(shí)例對(duì)象所擁有的屬性,然后就變成了這樣:
{'x': 5, 'y': 6}這兩個(gè)屬性僅屬于實(shí)例對(duì)象,和類對(duì)象并無關(guān),我們再次查看類對(duì)象屬性,看是否有這兩個(gè)
{'__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}實(shí)例對(duì)象和類對(duì)象屬性關(guān)系并不大,存放的內(nèi)存也是分隔開來的
del CC ee=CC()
執(zhí)行del類對(duì)象后,然后進(jìn)行再進(jìn)行實(shí)例對(duì)象的創(chuàng)建,就不能進(jìn)行創(chuàng)建操作了。那能不能進(jìn)行其它函數(shù)調(diào)用呢?
類中定義的屬性是靜態(tài)變量,方法也一樣,就算類對(duì)象被刪除了,它們依然在內(nèi)存中
總結(jié)
以上是生活随笔為你收集整理的Python对象注意点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python可变参数记录
- 下一篇: MoeCTF 2021Re部分-----