1. 程式人生 > >【python】區域性變數,全部變數,類變數,例項變數,類方法,例項方法,靜態方法的使用

【python】區域性變數,全部變數,類變數,例項變數,類方法,例項方法,靜態方法的使用

一:區域性變數

函式內部的變數名如果第一次出現,即被視為定義一個區域性變數,不管全域性域中有沒有用到該變數名,函式中使用的將是區域性變數,區域性變數只能在作用域內使用,也就是函式內部使用

二:全域性變數

在模組中使用,其在函式和類的外面定義的定義的變數。如果函式中沒有定於相同變數名的區域性變數,則在函式中使用的該變數是全域性變數。全域性變數可以在全域性的作用域使用

三:類變數

定義在類內,但不在方法和函式內,類變數也稱為靜態變數。類變數顧名思議是所以該類的例項所共有的,也是類內所以方法所共有的。

類內訪問格式:類名.類變數 或者self.類變數(不建議後面這種,因為後面這種的訪問形式已經預設將類類變數轉為例項變量了)

四:例項變數

顧名思義只能為這個例項使用,不能給其他例項使用。定義在方法中的變數,用 self 繫結到例項上,只作用於當前例項的類。

類內訪問格式:self.例項變數

類外訪問格式:例項名.例項變數

五:self介紹:

類的方法與普通的函式只有一個特別的區別——它們必須有一個額外的第一個引數名稱,但是在呼叫這個方法的時候你不為這個引數賦值,Python會提供這個值。這個特別的變數指物件本身,按照慣例它的名稱是self。雖然你可以給這個引數任何名稱,但是 強烈建議 你使用self這個名稱。

class Name():
    def add(self,a,b):
return a+b a=Name() a.add('zhang','yu')
這裡定義是一個name類的例項,然後在呼叫add()方法,但是隻傳入兩個引數。實際上此時self的作用就是等價於傳入add(a,'zhang','yu').此時方法中所以self將是例項化的物件。

六:類方法

第一個引數必須傳入預設類,也就是cls。前面必須加@classmethod修飾

七:靜態方法

與普通函式和格式一樣,沒有指定引數,與普通函式的區別就是靜態方法定義在類內的。前面加@staticmethod修飾

八:類方法

最常見的方法就是例項方法,必須傳入引數self。


例項如下:

import numpy as np
globalVariable1=10
globalVariable2=20
globalVariable3=30


class AAA():
    one="我是靜態變數(或者叫類變數),可以被類和例項呼叫"       #在類內,在類的方法外,在類的例項化物件中是公用的,可以屬於所以例項進行使用

    def __init__(self):
        self.two="hello,world"                #在類的方法內
        self.one="類變數當例項變數使用,此時已經遮蔽掉類變數就像是區域性變數遮蔽全域性變數一樣"

    def foo(self):
        there="我是區域性變數,只能在區域性作用域中使用"
        self.there="我是例項變數,只能被例項呼叫不能被類呼叫,在類內訪問形式是self.例項變數" #類的例項變量表示只屬於這個例項
        global globalVariable1                 #globals申明下,此處使用的是全域性變數
        globalVariable1=100
        globalVariable2=200                    #當只有全域性變數,又有區域性變數時,區域性變數遮蔽全域性變數
        a=globalVariable3+300                  #當只有全域性變數時,函式內使用全域性變數值
        print('globalVariable1',globalVariable1)
        print('globalVariable2=',globalVariable2)
        print('a=',a)
        print(there)
        print('AAA.one=',AAA.one) #類內使用類變數是類名.類變數

    def add(self,a,b):
        return a+b

    @staticmethod               #靜態方法
    def staticmethod():         #引數無要求
        print("我是靜態方法")

    @classmethod
    def classmethod(cls):      #引數一般為cls
        print("我是類方法")


a=AAA()
print(a.one)    #由於在類外使用類的例項.例項變數,所以此時one是例項變數使用
print(AAA.one)  #類外用類名.類的變數 訪問類變數
print(a.two)
print(a.foo())
print(a.there)   #在類外部,用 例項名.例項變數 的形式訪問例項變數。

結果如下:

類變數當例項變數使用,此時已經遮蔽掉類變數就像是區域性變數遮蔽全域性變數一樣
我是靜態變數(或者叫類變數),可以被類和例項呼叫
hello,world
globalVariable1 100
globalVariable2= 200
a= 330
我是區域性變數,只能在區域性作用域中使用
AAA.one= 我是靜態變數(或者叫類變數),可以被類和例項呼叫
None
我是例項變數,只能被例項呼叫不能被類呼叫,在類內訪問形式是self.例項變數