python全域性變數 區域性變數 類屬性 例項屬性

2021-08-27 23:40:32 字數 1998 閱讀 2010

由於這幾個變數比較容易混淆,下面總結一下。

全域性變數:

在乙個py檔案或者乙個模組或者包中,但不在類中、不在函式內中的變數。

區域性變數

在函式內、在class的方法內(未加self修飾),這就是區域性變數

靜態變數/類變數

在class內的,但不在class的方法內的,這就是靜態變數/類變數(並且作為類被匯入時,類變數是被初始化的)

例項變數

在class的方法內的,用self修飾的變數,這就是例項變數

看個例子:

global_a = 1

class

myclass:

class_a = 2

# 類變數

def__init__

(self):

self.a = 3

# 例項變數

a = 4

# 區域性變數

defsum

(self):

global global_a # 函式內定義global_a變數,使用global來宣告全域性變數

global_a += 1

return global_a

c = myclass()

1、全域性變數與區域性變數

global_a  # 1

c.global_a # 例項c訪問不到區域性變數

traceback (most recent call last):

file "", line

1, in

attributeerror: 'myclass' object has no attribute 'global_a'

c.sum() # 2 由於類函式內使用global關鍵字來宣告global_a,因此可以繼承使用全域性變數

global_a # 2 全域性變數值被更新

2、類變數與例項變數(屬性)

dir(c)   # 內建函式dir()取出例項c擁有的類屬性,和自己的例項屬性

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a', 'class_a', 'sum']

c.__dict__ # __dict__定義個例項屬性集,以key-value返回例項變數名稱及值(vars(c)同樣)

c.class_a # 2

c.a # 3

下面看下例項屬性試圖更改類屬性的情況:

c.class_a = 666

c.class_a # 666 # 例項c只是更改了自己屬性集中的class_a的value值,覆蓋了類中繼承來的class_a屬性

myclass.class_a # 2 # 類屬性不會改變

但是如果類屬性可變,情況就不同了:

class c:

x =

c = c()

c.x #

c.x.update()

c.x # 例項c的屬性集更新

c.x # 類的屬性字典x也被更新了

總結:

1、全域性變數,類可以直接訪問,函式內必須使用global關鍵字才可以訪問全域性變數

2、類屬性和例項屬性分別擁有自己的屬性集,類屬性更改會影響到所有例項,例項屬性的更改,只是寫入例項屬性集,不影響類屬性(但是可變類屬性除外)。

python全域性變數 區域性變數

定義在函式內的變數有區域性作用域,在乙個模組中最高端別的變數有全域性作用域。全域性變數的乙個特徵是除非被刪除掉,否則它們的存活到指令碼執行結束,且對於所有的函式,它們的值都是可以訪問的。global str global string def foo local str local string r...

Python 區域性變數,全域性變數

什麼是區域性變數?作用是什麼?定義在函式內部的變數,叫做區域性變數。在不同函式內部可以有相同名字的區域性變數,但是他們之間互不干擾。作用 在函式內臨時儲存資料,讓資料方便使用。什麼是全域性變數?作用是什麼?定義在函式外部的變數,叫做全域性變數。作用 全域性範圍內都可以使用的變數 總結1 在函式外邊定...

python全域性變數 區域性變數

全域性變數名大寫 區域性變數名小寫 全域性變數 name alex def printme print name printme alex 在函式內部修改全域性變數 用global對全域性變進行修改。name alex def printme global name name lupe print ...