【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.实例变量


猜你喜欢

转载自blog.csdn.net/lyl771857509/article/details/80215503