python3中类的重点与难点:类属性和实例属性的区别说明

 更新时间:2021年06月02日 11:30:49   作者:辉辉咯  
这篇文章主要介绍了python3中类的重点与难点:类属性和实例属性的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

先看图理解:

类属性就相当与全局变量,实例对象共有的属性,实例对象的属性为实例对象自己私有。

类属性就是类对象(Tool)所拥有的属性,它被所有类对象的实例对象(实例方法)所共有,在内存中只存在一个副本,这个和C++中类的静态成员变量有点类似。对于公有的类属性,在类外可以通过类对象和实例对象访问

类属性

class People(object):
    name = 'Tom'  #公有的类属性
    __age = 12     #私有的类属性
 
p = People() 
print(p.name)           #正确
print(People.name)      #正确
print(p.__age)            #错误,不能在类外通过实例对象访问私有的类属性
print(People.__age)        #错误,不能在类外通过类对象访问私有的类属性

实例属性(对象属性)

class People(object):
    address = '山东' #类属性
    def __init__(self):
        self.name = 'xiaowang' #实例属性
        self.age = 20 #实例属性
 
p = People()
p.age =12 #实例属性
print(p.address) #正确
print(p.name)    #正确
print(p.age)     #正确
 
print(People.address) #正确
print(People.name)    #错误
print(People.age)     #错误

通过实例(对象)去修改类属性

class People(object):
    country = 'china' #类属性
print(People.country)
p = People()
print(p.country)
p.country = 'japan' 
print(p.country)      #实例属性会屏蔽掉同名的类属性
print(People.country)
del p.country    #删除实例属性
print(p.country)

总结

如果需要在类外修改类属性,必须通过类对象去引用然后进行修改。如果通过实例对象去引用,会产生一个同名的实例属性,这种方式修改的是实例属性,不会影响到类属性,并且之后如果通过实例对象去引用该名称的属性,实例属性会强制屏蔽掉类属性,即引用的是实例属性,除非删除了该实例属性。

Python:类属性和实例属性总结

#类属性:类对象所拥有的的属性,它被所有类对象的实例对象共有,类对象和实例对象可以访问
#实例属性:实例对象所拥有的属性,只能通过实例对象访问
class Student:
    name='李明'  #类属性
    def __init__(self,age):
        self.age=age  #实例属性
        pass
    pass
Student.name='邓超'   #通过类对象去修改类属性  因为name属于类属性
print('-----------李明的数据------------------')
lm=Student(18)   #实例化对象,并传入参数
print(lm.age)    #通过实例对象去访问实例属性
print(lm.name) #通过实例对象去访问类属性
# lm.name='华晨宇'  #不能通过实例对象对类属性进行修改
print(lm.name)
print('--------------张三的数据--------------')
zs=Student(20)
print(zs.age)
print(zs.name)
print('------------通过类对象Student去访问name----------------')
print(Student.name)
# print(Student.age)   注:不能通过类对象去访问实例属性

运行结果

在这里插入图片描述

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python SMTP配置参数并发送邮件

    Python SMTP配置参数并发送邮件

    这篇文章主要介绍了Python SMTP配置参数并发送邮件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Python利用PaddleOCR制作个搜题小工具

    Python利用PaddleOCR制作个搜题小工具

    PaddleOCR是一个基于百度飞桨的OCR工具库,单模型支持中英文数字组合识别、竖排文本识别、长文本识别。本文将利用PaddleOCR开发一个搜题小工具,感兴趣的可以了解一下
    2022-06-06
  • pycharm下pyqt4安装及环境配置的教程

    pycharm下pyqt4安装及环境配置的教程

    这篇文章主要介绍了pycharm下pyqt4安装及环境配置的教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Python的网络编程库Gevent的安装及使用技巧

    Python的网络编程库Gevent的安装及使用技巧

    Gevent库的奥义在于并发式的高性能网络程序设计支持,这里我们将来讲解Python的网络编程库Gevent的安装及使用技巧,来看一下Gevent支持的多进程程序编写:
    2016-06-06
  • Python自动扫码支付的实现示例

    Python自动扫码支付的实现示例

    本文主要介绍了Python自动扫码支付的实现示例,包括二维码识别、自动填写支付信息、自动点击支付等过程,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • 一文带你搞懂Numpy中的深拷贝和浅拷贝

    一文带你搞懂Numpy中的深拷贝和浅拷贝

    深拷贝和浅拷贝是Python中重要的概念,本文将重点介绍在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理,快跟随小编一起来学习一下吧
    2022-04-04
  • Python import自己的模块报错问题及解决

    Python import自己的模块报错问题及解决

    这篇文章主要介绍了Python import自己的模块报错问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Python arrow 更好的日期时间模块

    Python arrow 更好的日期时间模块

    这篇文章主要为大家介绍Python的arrow日期时间模块,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • 深入探讨opencv图像矫正算法实战

    深入探讨opencv图像矫正算法实战

    在机器视觉中,对于图像的处理有时候因为放置的原因导致ROI区域倾斜,这个时候我们会想办法把它纠正为正确的角度视角来,本文主要介绍了opencv图像矫正算法,感兴趣的可以了解一下
    2021-05-05
  • python深度学习tensorflow1.0参数初始化initializer

    python深度学习tensorflow1.0参数初始化initializer

    这篇文章主要为大家介绍了python深度学习tensorflow1.0参数初始化initializer示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06

最新评论