久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python中self _init_(self,param1,param2)問(wèn)題

瀏覽:149日期:2022-09-17 14:06:33

問(wèn)題描述

昨天的self _init_(self,param1,param2)問(wèn)題class Ball:

def setName(tt,name): tt.name=namedef kick(tt): print(’我是%s,該死的,誰(shuí)踢我...’%tt.name)

a=Ball()a.setName(’球A’)b=Ball()b.setName(’球B’)c=Ball()c.setName(’球C’)a.kick()c.kick()將self改為其他變量名tt不影響結(jié)果

class Ball:

def __init__(self,name): self.name=namedef kick(self): print(’我是%s,該死的,誰(shuí)踢我...’%self.name)

b=Ball(’土豆’)b.kick()c=Ball(’黃瓜’)c.kick()注意:_init__(self,name)這個(gè)構(gòu)造函數(shù)的左右下劃線都是兩個(gè)。固定格式,不然會(huì)報(bào)錯(cuò)TypeError: object() takes no parameters 類(lèi)型錯(cuò)誤:對(duì)象不接受參數(shù)。前后對(duì)比發(fā)現(xiàn)是直接調(diào)用Ball的,相當(dāng)于類(lèi)Ball的自身函數(shù)。__init__()是類(lèi)的構(gòu)造函數(shù),在建立對(duì)象時(shí)調(diào)用。self是對(duì)“對(duì)象”自身的引用。內(nèi)部函數(shù)調(diào)用,用于初始化對(duì)象。class Ball:

def __init__(tt,name): tt.name=namedef kick(tt): print(’我是%s,該死的,誰(shuí)踢我...’%tt.name)

b=Ball(’土豆’)b.kick()c=Ball(’黃瓜’)c.kick()把self換成其他變量名發(fā)現(xiàn)結(jié)果不變?那改與不改究竟有撒區(qū)別呢?請(qǐng)理論+實(shí)例講解下。class Person:

name=’小甲魚(yú)’

p=Person()print(p.name)

class Person:

__name=’小甲魚(yú)’

p=Person()print(p._Person__name)

從外部訪問(wèn)這個(gè)變量了,Python在類(lèi)的內(nèi)部用_classname__spam替換了__spam,

參考http://blog.csdn.net/doufei_c... http://blog.csdn.net/gudeshen...懂Python的朋友都知道Python把以兩個(gè)或以上下劃線字符開(kāi)頭且沒(méi)有以兩個(gè)或以上下劃線結(jié)尾的變量當(dāng)作私有變量。私有變量會(huì)在代碼生成之前被轉(zhuǎn)換為長(zhǎng)格式(變?yōu)楣校^D(zhuǎn)換機(jī)制是這樣的:在變量前端插入類(lèi)名,再在前端加入一個(gè)下劃線字符。這就是所謂的私有變量軋壓(Private name mangling)。如類(lèi)A里的__private標(biāo)識(shí)符將被轉(zhuǎn)換為_(kāi)A__private,這就是上一節(jié)出現(xiàn)_A__private和__private消失的原因了。Python為了保證不能再class之外訪問(wèn)該變量,,Python會(huì)在類(lèi)的內(nèi)部自動(dòng)的把你定義的__spam變量的名字替換成為 _classname__spam(注意,classname前面是一個(gè)下劃線,spam前是兩個(gè)下劃線),Python把這種技術(shù)叫做“name mangling”。因此,用戶在外部訪問(wèn)__spam的時(shí)候就會(huì)提示找不到相應(yīng)的變量。解釋下用途 區(qū)別

問(wèn)題解答

回答1:

你是要問(wèn)什么?不太明白哈~

回答2:

永遠(yuǎn)不要那么訪問(wèn) 教程只是為了告訴你底層如何實(shí)現(xiàn)的

回答3:

http://greybeard.iteye.com/bl...http://python3-cookbook.readt...

這兩個(gè)鏈接可能可以解答你的疑問(wèn)

回答4:

特殊變量命名

1、 _xx 以單下劃線開(kāi)頭的表示的是protected類(lèi)型的變量。即保護(hù)類(lèi)型只能允許其本身與子類(lèi)進(jìn)行訪問(wèn)。若內(nèi)部變量標(biāo)示,如: 當(dāng)使用“from M import”時(shí),不會(huì)將以一個(gè)下劃線開(kāi)頭的對(duì)象引入 。

2、 __xx 雙下劃線的表示的是私有類(lèi)型的變量。只能允許這個(gè)類(lèi)本身進(jìn)行訪問(wèn)了,連子類(lèi)也不可以用于命名一個(gè)類(lèi)屬性(類(lèi)變量),調(diào)用時(shí)名字被改變(在類(lèi)FooBar內(nèi)部,__boo變成_FooBar__boo,如self._FooBar__boo)

3、 __xx__定義的是特列方法。用戶控制的命名空間內(nèi)的變量或是屬性,如init , __import__或是file 。只有當(dāng)文檔有說(shuō)明時(shí)使用,不要自己定義這類(lèi)變量。 (就是說(shuō)這些是python內(nèi)部定義的變量名)

標(biāo)簽: Python 編程
主站蜘蛛池模板: 平泉县| 虹口区| 荔浦县| 天镇县| 英吉沙县| 谷城县| 汉源县| 衡阳市| 雷山县| 宁晋县| 云龙县| 垦利县| 罗江县| 铁岭市| 西平县| 长兴县| 渑池县| 肇庆市| 定兴县| 龙山县| 新宾| 临邑县| 连江县| 龙州县| 鹰潭市| 句容市| 西吉县| 庆安县| 仁化县| 交口县| 托克托县| 台中县| 泗水县| 景德镇市| 汝州市| 隆子县| 浦北县| 兴城市| 五家渠市| 水城县| 咸宁市|