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()
广州
510660
广州
510660
佛山
460110
佛山
460110
class Record:
# 定义两个类变量
item = '鼠标'
date = '2016-06-16'
def info (self):
print('info方法中: ', self.item)
print('info方法中: ', self.date)
rc = Record()
print(rc.item) # '鼠标'
print(rc.date) # '2016-06-16'
rc.info()
Address.depict ="佛山很美"
print(addr1.depict)
print(addr2.depict)
佛山很美
佛山很美
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
类中,实例变量和类变量可以同名,但是在这种情况下,使用类对象将无法调用类变量,因为它会首选实例变量,因此这也是不推荐“类变量使用对象名调用”的原因。
上面程序在调用 Inventory 对象的 change() 方法之后,访问 Inventory 对象的 item、quantity 变量,由于该对象本身己有这两个实例变量,因此程序将会输出该对象的实例变量的值;接下来程序通过 Inventory 访问它的 item、quantity 两个类变量,此时才是真的访问类变量。显示器
500
鼠标
2000
Inventory.item = '类变量item'
Inventory.quantity = '类变量quantity'
# 访问iv的item和quantity实例变量
print(iv.item)
print(iv.quantity)
显示器
500
iv2 = Inventory()
iv2.change('键盘',300)
iv.item = 'iv实例变量item'
iv.quantity = 'iv实例变量quantity'
print(Inventory.item)
print(Inventory.quantity)
print(iv.item)
print(iv.quantity)
类变量item
类变量quantity
iv实例变量item
iv实例变量quantity
键盘
300
iv.color="red"
print(iv.color)
#因为 color 实例变量仅 iv 对象有,iv2 对象并没有,因此下面这行代码会报错
#print(iv2.color)
联系客服