python 类变量和实例变量

通常来说,实例变量是对于每个实例都独有的数据,而类变量是该类所有实例共享的属性和方法。

其实我更愿意用类属性和实例属性来称呼它们,但是变量这个词已经成为程序语言的习惯称谓。一个正常的示例是:

class Dog:

    kind = '土狗'         # class variable shared by all instances

    def __init__(self, name):
        self.name = name    # instance variable unique to each instance

    def bark(self):
        print(f'a {self.kind} dog named {self.name} is barking:"汪汪!"')

    def changeKind(self,kindName):
        self.kind = kindName

    def changeName(self,name):
        self.name = name



print('最初:------')
d1=Dog('阿旺')
d2=Dog('二蛋')
d1.bark()
d2.bark()

print('\n修实例变量后:------')
d1.changeKind('哈奇士')
d2.changeName('查理')
d1.bark()
d2.bark()

print('\n修类变量后:------')
Dog.kind='藏獒'
d3=Dog('翠花')

d1.bark()       # 不受影响   [self.kind一开始是指向类变量,经过重新赋值后,变成实例变量了]
d2.bark()       # 受影响    [之前创建的实例也是受影响的]
d3.bark()       # 受影响

Dog中,类属性kind为所有实例所共享;实例属性name为每个Dog的实例独有。

 结果:

最初:------
a 土狗 dog named 阿旺 is barking:"汪汪!"
a 土狗 dog named 二蛋 is barking:"汪汪!"

修实例变量后:------
a 哈奇士 dog named 阿旺 is barking:"汪汪!"
a 土狗 dog named 查理 is barking:"汪汪!"

修类变量后:------
a 哈奇士 dog named 阿旺 is barking:"汪汪!"
a 藏獒 dog named 查理 is barking:"汪汪!"
a 藏獒 dog named 翠花 is barking:"汪汪!"

 

注意,对类变量重新赋值,可以影响到之前创建的实例的。

参考:https://www.cnblogs.com/crazyrunning/p/6945183.html

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值