python類的引用變數
❶ python的類中引用成員變數必須加self嗎
Python的類中引用成員變數必須加self
類(class)初始化之後會得到實例(instance)。 self就是用於代表初始化的到的實例。 明確地寫一個self參數,使得類的方法(method)和普通的函數(function)本質上沒有差異,所有的輸入參數都顯示地傳遞到方法/函數當中。 當然作為類的方法,作用的對.
self是只有在類中才會有的。self在定義類的方法時是必須有的,雖然在調用時不必傳入相應的參數。 但self的名稱並不是一定的,在python中self不是關鍵詞。在初始化函數中可以把self換成任意名字.
❷ python3.2.3怎麼引用賦值了的變數
先解釋第三行中中括弧。
python的語法裡面,中括弧可以表示index。t[1]
就表示
t
這個
list
的第一項。
再解釋
int
和
list
變數賦值的問題。
第三行中,l=t[1],意思就是給
t
這個
list
的第一項起了個別名叫做
l。
這就好比給張三起了個名字叫小明,下文里不論提到張三還是小明,說的都是同一個人。
那麼在第四行里
l[0]='d'
其實就等價於
t[1][0]
=
'd',相當於改變了list的內容。
這在編程里叫做aliasing,python
的
list
都是有aliasing的,但是
int
(整數)沒有。
所以,在第二段中,把
x
放到
m
這個
list
里的時候,只是拷貝進去了一個數值,從此以後和
x
不再有關聯了。
這就好比做了個張三的克隆人,那個克隆人後來怎樣,跟張三都沒什麼關系了。
第15-18行也是一樣的道理。
如果,把那幾行改為a=[4];
b=a;
b[0]=5;
print
a;
這時就會打出5來了。
綜上所述,造成第一段和第二段區別的主要原因就是它們涉及的數據類型不同,list
=
起別名,
int
=克隆人。
❸ 對python 中class與變數的使用方法詳解
python中的變數定義是很靈活的,很容易搞混淆,特別是對於class的變數的定義,如何定義使用類里的變數是我們維護代碼和保證代碼穩定性的關鍵。
枚舉了各種情況,沒有辦法全部枚舉,但大部分情況應該都已經包含了。
1. 類變數:能夠通過類名或者object的self來訪問到,在類的內部和外部均可達,比如class_var_1
2. 對象變數:可以通過對象的self來使用的變數,通過constructor一路走向去的的self初次被賦值的變數都會成為對象變數,比如object_var_1, object_var_2, object_var_3, object_var_4
3. 內部變數:可以在函數中定義,並加上self前綴,在初次調用過定義的函數後,就可以在後面的對象的函數中被使用,比如internal_var_1
4. 局部變數:在函數內部定義,並使用的變數,在使用完之後就會被回收對類及object不可見
5. 全局變數:定義在類或者函數外部,作用域在變數被定義之後的任意代碼段,比如:global_var_1
❹ python如何在一個模塊中調用另一個模塊中的變數
python在一個模塊中調用另一個模塊中的變數步驟如下:
1、要實現變數的深度拷貝,需要使用到模塊,導入這個模塊。
❺ Python中的類變數、實例變數、局部變數
類體內,所有函數外定義。
所有實例對象共享。
只有通過類名調用時才能修改,通過實例調用時無法修改。
假設某類變數名為「name",如果用該類的某個實例x來為name賦值:x.name = 'xxx',實質是為該實例新定義了一個變數name。且之後無法再通過該實例調用類變數name了。因為使用實例調用某名為「xxx」變數時,若該實例沒有名為「xxx」的實例變數,則會去調用名為「xxx」的類變數;若有該名稱的實例變數,則該實例無法再直接調用該名稱對應的類變數。因此也不推薦通過實例來調用類變數。
即:通過類實例修改類變數的值時,實際是在定義新的與類變數同名的實例變數。
類體內,某函數(一般是__ init __ ())內定義。 「self.變數名」
因為是屬於某個具體實例的,因此不能通過類名訪問。
如果不在__ init __ () 中調用(該函數會在創建實例時自動調用一次),則只有調用該實例中定義目標實例變數的那個函數後,才能使用目標實例變數。因此最好在__ init __ () 中定義實例變數。
類體內,某函數內定義。
直接在函數內用「變數名=值」的方式進行定義。
函數執行完畢後,該局部變數即被銷毀。
❻ python中變數的引用、可變和不可變類型、局部變數和全局變數
變數的引用
變數和數據都是保存在內存中的
變數和數據是分開存儲的
數據保存在內存中某個位置,通過地址來標記
變數保存的是數據的地址,通過地址可以找到數據在內存空間的位置
把變數保存數據地址的過程稱為引用
變數的重新賦值修改的是變數中引用數據的內存地址
變數之間的賦值實際是引用的傳遞
函數參數的傳遞,本質也是引用的傳遞
函數的返回值本身也是引用的傳遞
可變和不可變類型
不可變類型,內存中的數據不允許被修改:數字類型(int,bool,float,complex,long(2,x)、字元串、元組(tuple)
可變類型,內存中的數據可以被修改:列表list、字典dict
無論是可變還是不可變數據類型,通過賦值語句,都會改變變數的引用
Hash函數只能接收不可變數據類型,字典的鍵也只能是不可變數據類型,字典的value值可以是任意數據類型
局部變數
1.在函數內部定義的變數就是局部變數(作用范圍只能是當前函數內部)
2.在函數外部無法直接訪問局部變數
3.不同的函數中可以定義同名的局部變數
4.局部變數的生命周期:從定義變數時開始,到函數運行結束
全局變數
1.在所有函數外邊定義的變數就是全局變數
2.讓所有函數都能訪問到,可以作為函數通信的橋梁
3.一般情況下,為了和普通變數的區別,需要加上g_或gl_前綴
4.全局變數一般放在所有函數的最上面
5.在函數內部修改全局變數,必須要加上global關鍵字,如果不加global只是定義了一個同名的局部變數
函數的多個返回值
❼ Python中的變數引用對象需注意的幾點
給你介紹Python中普通引用和共享引用在引用對象中需要注意的點:
普通引用:
Python中,變數的作用僅僅是一個標識,只有賦值後才被創建,它可以引用任何類型的對象,而且在引用之前必須賦值。賦值後的變數指向響應的對象,擁有該對象的空間。類型屬於對象,但是不是變數。
[python]
view plain
a = 3
a = "science"
上述代碼說明數值3和字元串「science」分別是兩種對象,初始變數a賦值對象3被創建,變數a指向對象3的內存空間,之後變數a又指向了字元串的內存空間。
共享引用:
[python]
view plain
a = 3
b = a
上述代碼說明變數a,b同時引用了對象3,兩個變數引用了相同的對象。正是因為兩者都是指向了相同的對象,所以當其中一個變數引用其他對象的時候,不會對另一個變數造成影響。例如:
[python]
view plain
a = 「science」
在上面代碼的基礎上,變數a引用了字元串對象「science」,此時變數b依舊引用對象3,而不是「science」。
但是有些對象的操作會在原處修改,例如列表。例如:
[python]
view plain
a = [1,2,3]
b = a
變數a,b應用了包含1,2,3對象的列表,自然而然的a[0]引用對象1,如果在變數a中執行操作
[python]
view plain
a[0] = 4
那麼變數b就變隨之變為[4,2,3]。避免這種情況可以使用操作,替換引用操作。