依据定义属性的位置差别,类属性又可细分为类属性(后续用类变量示意)和实例属性(后续用实例变量示意)。
类变量(类属性) (引荐进修: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网别的相干文章!