类别:Python / 日期:2019-12-02 / 浏览:116 / 评论:0

我们晓得,无论是在类中定义的属性照样要领,在类的外部,都没法直接挪用它们,因而,我们完全能够把类看作是一个自力的作用域(称为类定名空间),则类属性实在就是定义在类定名空间内的变量(类要领实在就是定义的类定名空间中的函数)。

依据定义属性的位置差别,类属性又可细分为类属性(后续用类变量示意)和实例属性(后续用实例变量示意)。

类变量(类属性) (引荐进修:Python视频教程)

类变量指的是定义在类中,但在各个类要领外的变量。类变量的特点是:一切类的实例化对象都能够同享类变量的值,即类变量能够在一切实例化对象中作为公用资本。

注重,类变量引荐直接用类名接见,但也能够运用对象名接见。

比方,下面代码定义了一个 Address 类,并为该类定义了多个类属性:

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() 要领输出两个类变量时,将会输出这两个类变量修正以后的值。

运转上面代码,将会看到以下输出效果:

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

经由过程输出效果能够看到,addr1 和 addr2 同享类变量,换句话说,转变类变量的值会作用于该类一切的实例化对象。

实例变量指的是定义在类的要领中的属性,它的特点是:只作用于挪用要领的对象。

注重,实例变量只能经由过程对象名接见,没法经由过程类名直接接见。

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 变量赋值,看上去很像是对类变量赋值,但并非,它们的作用是:从新定义了两个实例变量。

类中,实例变量和类变量能够同名,但是在这类情况下,运用类对象将没法挪用类变量,因为它会首选实例变量,因而这也是不引荐“类变量运用对象名挪用”的缘由。

上面顺序在挪用 Inventory 对象的 change() 要领以后,接见 Inventory 对象的 item、quantity 变量,因为该对象自身己有这两个实例变量,因而顺序将会输出该对象的实例变量的值;接下来顺序经由过程 Inventory 接见它的 item、quantity 两个类变量,此时才是真的接见类变量。

运转上面顺序,将看到以下输出效果:

显示器
500
鼠标
2000

以上就是python类变量和实例变量的细致内容,更多请关注ki4网别的相干文章!

打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章

评论区

发表评论 / 取消回复

必填

选填

选填

◎欢迎讨论,请在这里发表您的看法及观点。