Python类变量和实例变量(类属性和实例属性)
前面章节提到过,在类体中,根据变量定义的位置不同,以及定义的方式不同,类属性又可细分为以下 3 种类型:
- 类体中、所有函数之外:此范围定义的变量,称为类属性或类变量;
- 类体中,所有函数内部:以“self.变量名”的方式定义的变量,称为实例属性或实例变量;
- 类体中,所有函数内部:以“变量名=变量值”的方式定义的变量,称为局部变量。
不仅如此,类方法也可细分为实例方法、静态方法和类方法,后续章节会做详细介绍。
那么,类变量、实例变量以及局部变量之间有哪些不同呢?接下来就围绕此问题做详细地讲解。
类变量(类属性)
类变量指的是在类中,但在各个类方法外定义的变量。举个例子:
class CLanguage :
# 下面定义了2个类变量
name = "C语言中文网"
add = "http://c.biancheng网站站点" rel="nofollow" />
#使用类名直接调用
print(CLanguage.name)
print(CLanguage.add)
#修改类变量的值
CLanguage.name = "Python教程"
CLanguage.add = "http://c.biancheng网站站点" rel="nofollow" />
C语言中文网
http://c.biancheng网站站点" rel="nofollow" />此方式不使用,原因后续会讲)。例如,在 CLanguage 类的外部,添加如下代码: clang = CLanguage()
print(clang.name)
print(clang.add)
运行程序,结果为:
C语言中文网
http://c.biancheng网站站点" rel="nofollow" />
print("修改前,各类对象中类变量的值:")
clang1 = CLanguage()
print(clang1.name)
print(clang1.add)
clang2 = CLanguage()
print(clang2.name)
print(clang2.add)
print("修改后,各类对象中类变量的值:")
CLanguage.name = "Python教程"
CLanguage.add = "http://c.biancheng网站站点" rel="nofollow" />
修改前,各类对象中类变量的值:
C语言中文网
http://c.biancheng网站站点" rel="nofollow" />clang = CLanguage()
CLanguage.catalog = 13
print(clang.catalog)
运行结果为:
13
实例变量(实例属性)
实例变量指的是在任意类方法内部,以“self.变量名”的方式定义的变量,其特点是只作用于调用方法的对象。另外,实例变量只能通过对象名访问,无法通过类名访问。举个例子:
class CLanguage :
def __init__(self):
self.name = "C语言中文网"
self.add = "http://c.biancheng网站站点" rel="nofollow" />
clang = CLanguage()
print(clang.name)
print(clang.add)
#由于 clang 对象未调用 say() 方法,因此其没有 catalog 变量,下面这行代码会报错
#print(clang.catalog)
clang2 = CLanguage()
print(clang2.name)
print(clang2.add)
#只有调用 say(),才会拥有 catalog 实例变量
clang2.say()
print(clang2.catalog)
运行结果为:
C语言中文网 clang = CLanguage() #clang访问类变量 print(clang.name) print(clang.add) clang.name = "Python教程" clang.add = "http://c.biancheng网站站点" rel="nofollow" /> class CLanguage : name = " x" #类变量 add = "http://" #类变量 def __init__(self): self.name = "C语言中文网" #实例变量 self.add = "http://c.biancheng网站站点" rel="nofollow" /> clang.money = 30 print(clang.money) 局部变量 除了实例变量,类方法中还可以定义局部变量。和前者不同,局部变量直接以“变量名=值”的方式进行定义,例如: class CLanguage : # 下面定义了一个say实例方法 def count(self,money): sale = 0.8*money print("优惠后的价格为:",sale) clang = CLanguage() clang.count(100) 通常情况下,定义局部变量是为了所在类方能的实现。需要注意的一点是,局部变量只能用于所在函数中,函数执行完成后,局部变量也会被销毁。
http://c.biancheng网站站点" rel="nofollow" />
http://c.biancheng网站站点" rel="nofollow" />
http://c.biancheng网站站点" rel="nofollow" />