类属性和实例属性的区别
先看图理解:
类属性就相当与全局变量,实例对象共有的属性,实例对象的属性为实例对象自己私有。
类属性就是类对象
(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 类—类属性(私有属性、公有属性、实例属性、局部变量)类方法(实例方法、静态方法)
1. 创建类 类是对某个对象的定义,它包含有关对象动作方式的信息,包括它的名称.方法.属性和事件.类不存在于内存中,因此它本身并不是对象.当程序运行需要引用类的代码时,就会在内存中创建一个类的新实例, ...
- 一个类的实例是另一个类的属性python_Python中的类属性和实例属性引发的一个坑...
问题 今天在项目中遇到了个奇怪的问题,实例的一个时间属性并没有根据时间变化而变化,分析之后恍然大悟,总结下分享给大家.大家先看一段代码: import datetime import time cla ...
- 关于Python类属性与实例属性的讨论
标题名字有点长. 之所以想写这个文章是因为碰巧看到网上一篇关于Pyhon中类属性及实例属性区别的帖子.因为我之前也被这个问题困扰过,今天碰巧看到了这篇帖子,发现帖子的作者只是描述了现象,然后对原因的解 ...
- python实例属性与类属性_Python中的类属性和实例属性引发的一个坑-续
上篇文章Python 中的类属性和实例属性,我们探讨了类属性和实例属性引发的一个小坑.总结了类属性和实例属性的区别如下:类属性可以被类和实例调用,实例属性只能被实例调用 类属性不会随着实例的调用而改变 ...
- python的实例属性和静态属性表_Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法...
类属性可以直接在方法中赋值,但 一.调用该属性时,必须先调用该方法: 二.与 init 方法区别是,init方法只初始化一次,初始化完成后作为全局变量.在方法中赋值属性,每次调用该方法,该属性初始化一 ...
- 如何理解Java的类变量、成员变量、常量、类属性、实例属性、字段(field)、成员方法、类方法
文章目录 变量相关概念 变量/常量 类变量/静态变量 成员变量/实例变量 类属性/实例属性/对象属性 什么是 field 成员变量和类变量的区别 两个变量的生命周期不同 访问方式不同 数据存储位置不同 ...
- Python之路-面向对象继承和多态类属性和实例属性类方法和静态方法
一.面向对象 编程方式 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强-& ...
- Python 类的属性与实例属性
放假归来 ~~~ 一.概念 类对象:类名 实例对象:通过类创建的对象 类属性:类对象所拥有的属性.归类所有,被类对象和实例对象所共有. 类的公有属性可以在类外被访问. 实例属性:实例对象所特有的属性, ...
- Python类属性和实例属性分别是什么?
实例属性即同一个类的不同实例,其值是互不关联的,也不会互相影响的,定义时使用"self.属性名",调用时也使用"self.属性名". 类属性则是同一个类的所有实 ...
最新文章
- StaticFactoryMethod_Level1
- 独家 | 识别并解决数据质量问题的数据科学家指南
- 半世纪全球顶级学者迁移图(附视频、亿级学术信息)| 数据院科技大数据研究中心发布
- php 发出get与post请求
- hadoop job 未跑满资源_Hadoop多用户资源管理–Fair Scheduler介绍与配置
- 17 HTTP编程入门
- 《PHP精粹:编写高效PHP代码》——第1章面向对象编程
- 15岁杀人犯监狱学编程,37岁保释年薪70万
- python——获取数据类型
- python和rpa_什么是RPA
- Loadrunner脚本优化-参数化之关联MySQL数据库获取数据
- mount error 12 = Cannot allocate memory
- 【理论】【转】Android项目重构之路:架构篇
- 请求发送者与接收者解耦——命令模式(五)
- 数学建模——论文排版
- Android中铃声总结源码
- 虚拟数字人的“风”,从“工业级”吹向“消费级”
- 在上海乐字节学习CRM项目管理
- 如何做到在子线程更新 UI?
- linux cpu飙高原因排查(有手就行)