本文目錄一覽:
python中的self是什麼
self是類的實例或對象。在Python中,self包含在第一個參數中。但是,Java中的情況並非如此,它是可選的。它有助於區分具有局部變數的類的方法和屬性。init方法中的self變數引用新創建的對象,而在其他方法中,它引用其方法被調用的對象。
python中的self如何理解呢
類的方法與普通的函數只有一個特別的區別–它們必須有一個額外的第一個參數名稱,但是在調用這個方法的時候你不為這個參數賦值,Python會提供這個值.這個特別的變數指對象本身,按照慣例它的名稱是self.
雖然你可以給這個參數任何名稱,但是 強烈建議 你使用self這個名稱–其他名稱都是不贊成你使用的.使用一個標準的名稱有很多優點–你的程序讀者可以迅速識別它,如果使用self的話,還有些IDE(集成開發環境)也可以幫助你.
=======================================================給C++/Java/C#程序員的注釋
Python中的self等價於C++中的self指針和Java、C#中的this參考.
=======================================================你一定很奇怪Python如何給self賦值以及為何你不需要給它賦值.舉一個例子會使此變得清晰.假如你有一個類稱為MyClass和這個類的一個實例MyObject.當你調用這個對象的方法MyObject.method(arg1, arg2)的時候,這會由Python自動轉為MyClass.method(MyObject, arg1, arg2)–這就是self的原理了.
這也意味著如果你有一個不需要參數的方法,你還是得給這個方法定義一個self參數.
我這裡補充一下幾個實常式序以加深理解: class Person:
def sayHi(self):
print ‘Hello,how are you?’p=Person()
p.sayHi()結果顯示為:
Hello,how are you?
python中的self
首先,對於python,只有針對類來說的self才有意義,所以python中的self,說的即是python類中的self。
以下我將結合python類的相關概念敘述,必須明確的是,self只能用在python類的方法(即函數)中。
在我看來,python的類有三個相關概念:屬性(即變數)、方法(即函數)、繼承。
1.屬性(即變數)
(1)如果變數定義在類下面而不是類的方法下面,那這個變數既是類的屬性也是類實例的屬性。
(2)如果變數定義在類的方法下面,如果加了self,那這個變數就是類實例的屬性,不是類的屬性;如果沒有加self,這個變數只是這個方法的局部變數,既不是類的屬性也不是類實例的屬性。
2.方法(即函數)
(1)如果在類中定義函數時加了self,那這個函數是類實例的方法,而不是類的方法。
(2)如果在類中定義函數時候沒有加self,那這個函數就只是類的方法,而不是類實例的方法。
3.繼承
通俗的講,子類繼承父類,也就是子類繼承了父類的屬性和方法,相當於把父類的屬性和方法的定義直接加到子類里來,這個時候以子類為主。
說明 :以上闡述是基於我個人的理解用最直觀的語言進行的總結,如果有錯誤歡迎提出
Python類中self的作用
舉例如下:
其中,self是對於對象自身的引用。
在這裡,self 改變了變數的作用域。
不加 self 的變數是局部變數,作用域是當前函數;加了 self 的變數是實例變數,作用域是當前實例。
也就是,我們在外部將類 Person 實例化時,可以調用它的 inputname 變數,因為這個變數是實例變數,作用域當前實例,卻調用不了 input1 變數,因為這個變數是局部變數,只能在setName 函數中使用。
我們這裡假設 lil = Person(),其中 lil 是 Person 類的一個實例。
當我們調用 lil 的 setName 和 getName 或 greet 方法時,lil 自動將自己作為第一個參數,傳入函數中,因此形象的稱為 self
所以 self 是一個實例,指的實例本身。
通過使用 self,我們可以在其成員方法中訪問他們要對其特性進行操作的對象本身了。
這樣說很拗口,換句話說,我們通過使用 self,將 attribute 的作用域從當前函數 變成 當前實例,這樣這個 attribute 就可以在整個實例中都有效。這樣便於我們在不同的成員方法中對這個 attribute 進行操作。例如上面例子中的 self.name ,因為使用了 self,我們在 getName 和 greet 中均可以使用該實例變數。
而且,對於實例 lil,我們也可以直接調用 name 這個attribute,也就是 lil.name ,是有效的。但是 lil.input1 是無效的,會提示「類裡面沒有這個屬性」。
關於Python中的self
python中的self就相當於c++中的this指針
也就是指向對象本身的指針
self.name
=
name
就是當前對象的成員變數name賦值為name。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/194091.html