Python類中self的作用

舉例如下:

class Person:

    def setName(self,name):
        self.name = name
        self.inputname = name
        input1 = name
    
    def getName(self):
        return self.name
    
    def greet(self):
        print "Hello world! I'm %s ." % self.name

其中,self是對于對象自身的引用。

我們對比 self.inputnameinput1 這兩個變量,都賦值為 name,那么這兩個值有什么區(qū)別呢?

在這里,self 改變了變量的作用域。
不加 self 的變量是局部變量,作用域是當前函數(shù);加了 self 的變量是實例變量,作用域是當前實例。

也就是,我們在外部將類 Person 實例化時,可以調(diào)用它的 inputname 變量,因為這個變量是實例變量,作用域當前實例,卻調(diào)用不了 input1 變量,因為這個變量是局部變量,只能在setName 函數(shù)中使用。

self 是什么對象?

我們這里假設(shè) lil = Person(),其中 lil 是 Person 類的一個實例。
當我們調(diào)用 lil 的 setName 和 getName 或 greet 方法時,lil 自動將自己作為第一個參數(shù),傳入函數(shù)中,因此形象的稱為 self
所以 self 是一個實例,指的實例本身。

通過使用 self,我們可以在其成員方法中訪問他們要對其特性進行操作的對象本身了。

換句話說

這樣說很拗口,換句話說,我們通過使用 self,將 attribute 的作用域從當前函數(shù) 變成 當前實例,這樣這個 attribute 就可以在整個實例中都有效。這樣便于我們在不同的成員方法中對這個 attribute 進行操作。例如上面例子中的 self.name ,因為使用了 self,我們在 getName 和 greet 中均可以使用該實例變量。

而且,對于實例 lil,我們也可以直接調(diào)用 name 這個attribute,也就是 lil.name,是有效的。但是 lil.input1 是無效的,會提示“類里面沒有這個屬性”。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本章將會介紹 自動引用計數(shù)的工作機制自動引用計數(shù)實踐類實例之間的循環(huán)強引用解決實例之間的循環(huán)強引用閉包引起的循環(huán)強...
    寒橋閱讀 1,029評論 0 0
  • 86.復(fù)合 Cases 共享相同代碼塊的多個switch 分支 分支可以合并, 寫在分支后用逗號分開。如果任何模式...
    無灃閱讀 1,543評論 1 5
  • 7月22日早上四點多就爬起來,跟著爸爸媽媽一起去天河機場趕飛機。飛機是早上八點五十五,十點四十五到的廣州,在廣州白...
    小方_2d82閱讀 296評論 3 1
  • 幸存偏差:你以為別人成功了,你也可以成功,其實你并不知道他經(jīng)歷了多少次失敗 游泳選手身材錯覺:你以為練游泳可以練出...
    請叫我李大俠閱讀 379評論 0 0
  • 性子好急,真的好急,可是孩子在做不愿意做的事情的時候,總是拖,能拖一分鐘都好,孩子的作業(yè)之前看了一遍又一遍,把他容...
    里娃閱讀 148評論 0 0

友情鏈接更多精彩內(nèi)容