• python 类变量和实例变量


    类变量是在类空间中命名的,就是不加self的变量。

    因此,程序不能直接访问这些变量,必须通过类名+类变量来访问, 不管是在全局范围内还是函数内访问这些类变量,都必须使用类名进行访问

    class Address:
        detail = "guangzhou"
        post_code = "510660"
        def info(self):
            #尝试直接访问类变量
            #print(detail) #报错
    
            #通过类类访问类变量
            print(Address.detail)
            print(Address.post_code)
    
    #通过类来访问Address 类的类变量
    print(Address.detail)
    addr = Address()
    addr.info()
    #修改Address类的类变量
    Address.detail = "fushan"
    
    Address.post_code = "460110"
    addr.info()
    guangzhou
    guangzhou
    510660
    fushan
    460110
    请按任意键继续. . .

    实际上, python完全允许使用实例(对象)来访问对象所属类的类变量(当然还是推荐使用类访问类变量)

    class Record:
    
        #define two class variable
        item = "鼠标"
        date = "2016"
        def info(self):
            print("In info method : ", self.item)
            print("In info method: ",self.date)
    
    rc = Record()
    #也可以通过实例来访问类变量
    print(rc.item)
    print(rc.date)
    rc.info()
    鼠标
    2016
    In info method :  鼠标
    In info method:  2016
    请按任意键继续. . .

    实际上,程序通过对象访问类变量,其本质还是通过类名在访问类变量

    由于通过对象访问类变量的本质还是类名在访问,因此如果类变量发生了改变,当程序访问这些类变量时也会读到修改之后的值

    class Record:
    
        #define two class variable
        item = "鼠标"
        date = "2016"
        def info(self):
            print("In info method : ", self.item)
            print("In info method: ",self.date)
    
    rc = Record()
    #也可以通过实例来访问类变量
    print(rc.item)
    print(rc.date)
    #由于通过对象访问类变量的本质还是类名在访问,因此如果类变量发生了改变,当程序访问这些类变量时也会读到修改之后的值
    Record.item = "键盘"
    Record.date = "2021"
    rc.info()
    鼠标
    2016
    In info method :  键盘
    In info method:  2021
    请按任意键继续. . .
    class Record:
    
        #define two class variable
        item = "鼠标"
        date = "2016"
        def info(self,item,date):
            self.item = item
            self.date = date
    rc = Record()
    print(rc.item)
    print(rc.date)
    rc.info("display","2021")#修改的还是实例(self)的变量item,date,
    print(rc.item)
    print(rc.date)
    print("-"*30)
    print(Record.item)#item,date不会被改变
    print(Record.date)        
    鼠标
    2016
    display
    2021
    ------------------------------
    鼠标
    2016
    请按任意键继续. . .
  • 相关阅读:
    常见排序算法-----堆排序
    深度优先搜索和广度优先搜索
    剑指offer整理-------二维数组查找
    常见排序算法-----希尔排序
    log4j日志不能输出到文件
    常见排序算法-----直接插入排序
    从零开始学习springBoot(使用thymeleaf和freemarker模板)
    从零开始学习springBoot(Spring Boot使用Druid和监控配置)
    从零开始学习springBoot(定时任务)
    从零开始学习springBoot(默认静态资源和自定义资源映射)
  • 原文地址:https://www.cnblogs.com/shunguo/p/15678756.html
Copyright © 2020-2023  润新知