最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 类属性和实力属性怎么区分

    正文概述    2020-08-08   213

    类属性和实力属性怎么区分

    我们知道,无论是在类中定义的属性还是方法,在类的外部,都无法直接调用它们,因此,我们完全可以把类看做是一个独立的作用域(称为类命名空间),则类属性其实就是定义在类命名空间内的变量(类方法其实就是定义的类命名空间中的函数)。

    根据定义属性的位置不同,类属性又可细分为类属性(后续用类变量表示)和实例属性(后续用实例变量表示)。

    类变量(类属性)

    类变量指的是定义在类中,但在各个类方法外的变量。类变量的特点是:所有类的实例化对象都可以共享类变量的值,即类变量可以在所有实例化对象中作为公用资源。

    注意,类变量推荐直接用类名访问,但也可以使用对象名访问。

    例如,下面代码定义了一个 Address 类,并为该类定义了多个类属性:

    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()

    该程序中,第二、三行代码为 Address 定义了两个类变量。当程序中第一次调用 Address 对象的 info() 方法输出两个类变量时,将会输出这两个类变量的初始值。接下来程序通过 Address 类修改了两个类变量的值,因此当程序第二次通过 info() 方法输出两个类变量时,将会输出这两个类变量修改之后的值。

    运行上面代码,将会看到如下输出结果:

    广州
    510660
    广州
    510660
    佛山
    460110
    佛山
    460110

    实例变量(实例属性)

    实例变量指的是定义在类的方法中的属性,它的特点是:只作用于调用方法的对象。

    注意,实例变量只能通过对象名访问,无法通过类名直接访问。

    Python 允许通过对象访问类变量,但无法通过对象修改类变量的值。因为,通过对象修改类变量的值,不是在给“类变量赋值”,而是定义新的实例变量。

    例如如下程序:

    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

    上面程序中,第 8、9 行代码通过实例对 item、quantity 变量赋值,看上去很像是对类变量赋值,但并不是,它们的作用是:重新定义了两个实例变量。

    类中,实例变量和类变量可以同名,但是在这种情况下,使用类对象将无法调用类变量,因为它会首选实例变量,因此这也是不推荐“类变量使用对象名调用”的原因。

    上面程序在调用 Inventory 对象的 change() 方法之后,访问 Inventory 对象的 item、quantity 变量,由于该对象本身己有这两个实例变量,因此程序将会输出该对象的实例变量的值;接下来程序通过 Inventory 访问它的 item、quantity 两个类变量,此时才是真的访问类变量。更多学习内容,请点击Python学习网。


    起源地下载网 » 类属性和实力属性怎么区分

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元