當前位置:首頁 » 編程語言 » python類中self

python類中self

發布時間: 2023-03-31 16:59:12

python類中self參數和cls參數

self:表示褲老運一個類胡梁含早的實例對象本身

輸出:

a .fun_one() = A .fun_one( a ) 二者是等價的;

cls :所指的就是這個類本身

② 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

晚上特別針對Python的self查了一下,理理。Python要self的理由Python的類的方法和普通的函數有一個很明顯的區別,在類的方法必須有個額外的第一個參數
(self
),但在調用這個方法的時候不必為這個參數賦值
(顯勝於隱
的引發)。Python的類的方法的這個特別的參數指代的是對象本身,而按照Python的慣例,它用self來表示。(當然我們也可以用其他任何名稱來代替,只是規范和標准在那建議我們一致使用self)為何Python給self賦值而你不必給self賦值?例子說明:創建了一個類MyClass,實例化MyClass得到了MyObject這個對象,然後調用這個對象的方法MyObject.method(arg1,arg2)
,這個過程中,Python會自動轉為Myclass.mehod(MyObject,arg1,arg2)這就是Python的self的原理了。即使你的類的方法不需要任何參數,但還是得給這個方法定義一個self參數,雖然我們在實例化調用的時候不用理會這個參數不用給它賦值。實例:class
Python:
def
selfDemo(self):
print
'Python,why
self?'p
=
Python()p.selfDemo()輸出:Python,why
self?把p.selfDemo()帶個參數如:p.selfDemo(p),得到同樣的輸出結果如果把self去掉的話,
class
Python:
def
selfDemo():
print
'Python,why
self?'p
=
Python()p.selfDemo()這樣就報錯了:TypeError:
selfDemo()
takes
no
arguments
(1
given)擴展self在Python里不是關鍵字。self代表當前對象的地址。self能避免非限定調用造成的全局變數。

④ python中的self是什麼

class Name():
def __init__(self, name):
self.name = name
def say(self):
print 'Hello, %s' % self.name
如果不用self,那該怎麼實現say(),非常難。

__inti__(self.name)叫做構造函數,凡是Name類的一個對象被創建,先運行構造函數,構造函數需要的參數就是類所需要的參數。 比如 a = Name('Ricky') 其實是 給__init__(self,name)提供參數。而self就說明是類的變數,類里別的函數也可以用的!

這是面向對象編程思路的一個瓶頸,希望你能弄懂。

⑤ python類中self的問題

原因都出在第4行這句: test3.count += 1 #!!!注意此處不是self.count
你每運行一次 init() 函數 count 就會累加一
注意 你累加的是 test3.count 而不是 self.count
所以 運行了三次 init() 函數 的輸出是 1 2 3
如果 你累加的是 self.count 就會輸出三次 1 1 1
***首先要理解上面所說的 再繼續看下面的***
既然如此 print(cc3.count,cc4.count) #返回2,2 就是正確的
cc3.count 指向的 test3().count 輸出的是 2 沒異議是吧
cc4.count 指向的也是 test3().count 為什麼不是 2 都是同一個東西
print(cc3.count,cc4.count) #返回3,6
前面第一個3 就不用多說了
後面的第二個6 是因為你 cc4.count=6 這句指定了他是6
比如 a = 6 輸出a會是什麼? 當然是6啊

⑥ 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。

⑧ Python中的self有啥用 self.name=name這句話有啥作用

self是對「對象」自身的引用。相當於c++中的this。python中self在類的方法中必須以傳入參數寫在函數的參數列表中。它實際上是指向類的對象的一個類似於C++中指針的私有變數。

python規定:訪問類成員時,需要在前面加上this。這里,this.name = name表示為Person類添加了屬性name。

如果變數前不加this,則視為局部變數。這個變數會在方法運行結束後失效。而屬性在整個類的范圍內都是有效的。

self是只有在類中才會有的。self在定義類的方法時是必須有的,雖然在調用時不必傳入相應的參數。

(8)python類中self擴展閱讀:

1、if 語句

1)基本用法:

if 要判斷的條件:條件成立的時候,要做的事情

else:條件不成立的時候,要做的事情

if和else語句以及各自的縮進部分都是一個完整的代碼塊

2、if 邏輯運算

and:

# 條件1 and 條件2

# 兩個條件同時滿足,就返回True

# 兩個條件都不滿足,返回False

⑨ python中self是什麼意思

題主可以學習一下面向對象編程的一般知識。
概括的說,主流的支持面向對象編程的語言(Java, python等)關於「類」的定義是很接近的。類要有一個構造函數(python里就是__init__,Java里是與類同名且無返回值的一個方法),在生成對象時會自動調用。然後為了方便在類的方法中引用當前對象,就引入了一些關鍵字(python里是self,Java里是this)。所以self並不是程序員自己定義的,而是語言本身內建支持的。
關於self,由於python的語法確實比較奇特,看起來好像self是一個普通參數,但實際並非如此。
關於構造函數,如果題主沒有感覺到其存在的必要性,不必在意,不過要記住有這樣一個語法。等以後遇到有需求的時候自然就明白了。

⑩ 【python】為何類中方法要有參數self

明明沒有加入任何參數,為何會有 takes no arguments (1 given) ?

首先,關於實例屬性和類屬性都是同樣的方法:

對於A(). app_func 的區別:

我們要的應該是單純的function,並不是類A的綁定method,為什麼會困中有這樣的區別?

因為在Python的解釋器內部,當我們調用t.prt()時,實際上Python解釋成Test.prt(t),也就是說把self替換成類的實例。

即當寫入 app_func = func 相當於沒有寫self的綁定方法:

故調用A().func ()時,宴空解釋器解釋為A.func (A()),但是這個綁定方法並沒有寫self,故報錯TypeError: func() takes no arguments (1 given)。晌尺瞎

熱點內容
瑞納自動買哪個配置 發布:2024-11-02 20:18:45 瀏覽:559
sql復制資料庫結構 發布:2024-11-02 20:18:43 瀏覽:582
yaf編譯 發布:2024-11-02 20:06:30 瀏覽:126
小數除以大數怎麼演算法 發布:2024-11-02 19:44:59 瀏覽:810
安卓手機如何重新設置付款密碼 發布:2024-11-02 19:31:44 瀏覽:980
多巴胺3mg靜脈注射怎麼配置 發布:2024-11-02 19:25:50 瀏覽:618
源碼之城 發布:2024-11-02 19:24:43 瀏覽:513
國軍標環境存儲要求 發布:2024-11-02 19:23:04 瀏覽:107
sql多行轉多列 發布:2024-11-02 19:17:52 瀏覽:119
linuxftp文件夾許可權 發布:2024-11-02 19:17:03 瀏覽:899