成员变量与类变量

成员变量与类变量(静态成员变量)

定义在类中的变量我们又分为成员变量以及类变量(或者称静态成员变量)

类变量定义在类中,且在函数体之外,类变量通常不作为实例变量使用,类变量在整实例化的过程中是公用的。

成员变量:定义在方法中且通过self绑定在实例上的变量,只作用于当前实例。

成员变量与类变量的区别:
  1. 定义的位置不同,类变量直接定义在类中变量,成员变量是定义在方法绑定在self身上的变量

  2. 成员变量使用对象来访问,类变量使用类名来访问

  • 类变量主要给我们的类使用的.
    调用类变量的时候,建议使用类名来进行调用.
    但若执意使用对象来进行调用,它也不会报错.

  • 成员变量是专门给对象使用的,不能使用类名来进行调用.

  1. 在内存中出现的时机不同【类变量随着类的加载而出现,成员变量随着对象的创建而出现】

  2. 优先级不同,使用对象调用的时候优先使用成员变量

演示1 : 定义的位置

class Student(object):
    #类变量
    classname = "1802"
    
    def __init__(self):
        #成员变量
        self.name = "zhang"
        self.classname = "1888"  # 这个也是成员变量,只不过与类变量同名

演示2 : 变量的调用

1 成员变量中没有和类变量同名

class Student(object):
    #类变量
    classname = "1802"
    
    def __init__(self):
        #成员变量
        self.name = "zhang"
        #self.classname = "1888"  # 这个也是成员变量,只不过与类变量同名 (此时注释该变量)

# 成员变量通过实例化对象调用
stu = Student()

# 调用成员变量
print(stu.name)
# 打印结果 'zhang'

#类变量的调用
print(Student.classname)  # 通过类名调用类变量
print(stu.classname)  # 可以通过对象调用类变量
# 打印结果
1802
1802

2 成员变量和类变量同名

class Student(object):
    #类变量
    classname = "1802"
    
    def __init__(self):
        #成员变量
        self.name = "zhang"
        self.classname = "1888"  # 这个也是成员变量,只不过与类变量同名

# 成员变量通过实例化对象调用
stu = Student()

# 调用成员变量
print(stu.name)
# 打印结果 'zhang'

#类变量的调用
print(Student.classname)
# 打印结果 1802


print(stu.classname)
# 打印结果  1888

所以,当成员变量不存在,并且类变量存在的时候,在使用对象调用属性的时候,会调用类变量;当成员变量和类变量同时存在,且同名时,使用对象调用属性,优先调用成员变量

演示3 :更改变量的值

1 成员变量中没有和类变量同名

class Student(object):
    #类变量
    classname = "1802"
    
    def __init__(self):
        #成员变量
        self.name = "zhang"
        #self.classname = "1888"  # 这个也是成员变量,只不过与类变量同名 (此时注释该变量)


stu = Student()

#更改变量的值

#通过类名来更改类变量的值
Student.classname = "1804"
print(Student.classname)
# 打印结果 1804

#通过对象更改类变量的值
stu.classname = "1803"
print(stu.classname)
# 打印结果 1803

#创建一个新的变量
stu2 = Student()
print(stu2.classname)
#"1804"
print(Student.classname)
#"1804"

2 成员变量和类变量同名

class Student(object):
    #类变量
    classname = "1802"
    
    def __init__(self):
        #成员变量
        self.name = "zhang"
        self.classname = "1888"  # 这个也是成员变量,只不过与类变量同名


stu = Student()

#更改变量的值

#通过类名来更改类变量的值
Student.classname = "1804"
print(Student.classname)
# 打印结果 1804

#通过对象更改类变量的值
stu.classname = "1803"
print(stu.classname)
# 打印结果 1803

#创建一个新的变量
stu2 = Student()
print(stu2.classname)
#"1888"
print(Student.classname)
#"1804"

所以: 通过对象来更改成员变量或者是类变量的值的时候,只是改变的当前对象的值,而通过类名来更改类变量的值的时候,更改的则是类变量的初始值。

结论:
  1. 当类变量与成员变量同名时,使用对象来调用时,默认调用的是成员变量的值
  2. 当成员变量不存在,并且类变量存在的时候,在使用对象调用属性的时候,会调用类变量
  3. 成员变量只能通过对象来调用,而类变量不但可以通过对象调用,还可以通过类名来调用
  4. 通过对象来更改成员变量或者是类变量的值的时候,只是改变的当前对象的值,而通过类名来更改类变量的值的时候,更改的则是类变量的初始值。

什么时候使用成员变量?
什么时候使用类变量?
当初始化对象的时候,需要使用到的参数,把它定义成成员变量,
类变量大多数时候,无需改变的量,可以把它定义成类变量.

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值