您的位置是:网站首页>Python编程Python编程

python类变量和实例变量

少儿编程网2020-03-27 14:48:17Python编程 人已围观 来源:少儿编程 -用户投稿

简介我们知道,无论是在类中定义的属性还是方法,在类的外部,都无法直接调用它们,因此,我们完全可以把类看做是一个独立的作用域(称为类命名空间),则类属性其实就是定义在类命名空间内的变量(类方法其实就是定义的类命名空间中的函数)。根据定义属性的位置不同,类属性又可细分为类属性(后续用类变量表示)和实例属性(

版权所有:http://wWw.pxcodeS.com

我们知道,无论是在类中定义的属性还是方法,在类的外部,都无法直接调用它们,因此,我们完全可以把类看做是一个独立的作用域(称为类命名空间),则类属性其实就是定义在类命名空间内的变量(类方法其实就是定义的类命名空间中的函数)。

 tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

根据定义属性的位置不同,类属性又可细分为类属性(后续用类变量表示)和实例属性(后续用实例变量表示)。tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

类变量(类属性) (推荐学习:python视频教程)tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

类变量指的是定义在类中,但在各个类方法外的变量。类变量的特点是:所有类的实例化对象都可以共享类变量的值,即类变量可以在所有实例化对象中作为公用资源。tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

注意,类变量推荐直接用类名访问,但也可以使用对象名访问。tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

例如,下面代码定义了一个 Address 类,并为该类定义了多个类属性:tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

class Address :
    detail = '广州'
    post_code = '510660'
    def info (self):
        # 尝试直接访问类变量
        #print(detail) # 报错
        # 通过类来访问类变量
        print(Address.detail) # 输出 广州
        print(Address.post_code) # 输出 510660
#创建 2 个类对象
addr1 = Address()
addr1.info()
addr2 = Address()
addr2.info()
# 修改Address类的类变量
Address.detail = '佛山'
Address.post_code = '460110'
addr1.info()
addr2.info()

该程序中,第二、三行代码为 Address 定义了两个类变量。当程序中第一次调用 Address 对象的 info() 方法输出两个类变量时,将会输出这两个类变量的初始值。接下来程序通过 Address 类修改了两个类变量的值,因此当程序第二次通过 info() 方法输出两个类变量时,将会输出这两个类变量修改之后的值。tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

运行上面代码,将会看到如下输出结果:tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

广州
510660
广州
510660
佛山
460110
佛山
460110

通过输出结果可以看到,addr1 和 addr2 共享类变量,换句话说,改变类变量的值会作用于该类所有的实例化对象。tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

实例变量指的是定义在类的方法中的属性,它的特点是:只作用于调用方法的对象。tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

注意,实例变量只能通过对象名访问,无法通过类名直接访问。tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

Python 允许通过对象访问类变量,但无法通过对象修改类变量的值。因为,通过对象修改类变量的值,不是在给“类变量赋值”,而是定义新的实例变量。tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

例如如下程序:tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

class Inventory:
    # 定义两个类变量
    item = '鼠标'
    quantity = 2000
    # 定义实例方法
    def change(self, item, quantity):
        # 下面赋值语句不是对类变量赋值,而是定义新的实例变量
        self.item = item
        self.quantity = quantity
# 创建Inventory对象
iv = Inventory()
iv.change('显示器', 500)
# 访问iv的item和quantity实例变量
print(iv.item) # 显示器
print(iv.quantity) # 500
# 访问Inventory的item和quantity类变量
print(Inventory.item) # 鼠标
print(Inventory.quantity) # 2000

上面程序中,第 8、9 行代码通过实例对 item、quantity 变量赋值,看上去很像是对类变量赋值,但并不是,它们的作用是:重新定义了两个实例变量。tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

类中,实例变量和类变量可以同名,但是在这种情况下,使用类对象将无法调用类变量,因为它会首选实例变量,因此这也是不推荐“类变量使用对象名调用”的原因。tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

上面程序在调用 Inventory 对象的 change() 方法之后,访问 Inventory 对象的 item、quantity 变量,由于该对象本身己有这两个实例变量,因此程序将会输出该对象的实例变量的值;接下来程序通过 Inventory 访问它的 item、quantity 两个类变量,此时才是真的访问类变量。tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

运行上面程序,将看到如下输出结果:tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

显示器
500
鼠标
2000

以上就是python类变量和实例变量的详细内容,更多请关注少儿编程网其它相关文章!tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

来源:php中文网tIk少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

版权所有:http://wWw.pxcodeS.com


相关文章:

支持一下 ( )

python类变量和实例变量

      匿名评论
    • 评论
    人参与,条评论
    python类变量和实例变量

客服在线

服务时间

周一至周日 9:00-21:00