类属性和实例属性的区别
先看图理解:
类属性就相当与全局变量,实例对象共有的属性,实例对象的属性为实例对象自己私有。
类属性就是类对象
(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.属性名". 类属性则是同一个类的所有实 ...
最新文章
- 如何创建自己的ESLint配置包
- 理性解读中国科技实力:不震惊式吹捧,也不全盘抹杀
- MyEclipse结合Git
- linux 查看nexus状态,在linux上搭建nexus私服(CentOS7)
- jquery ajax 找到数据怎样放到下拉框里_闲话Excel之简易数据动态图表的制作
- MySQL中索引的分类和基本操作
- [gkk传智]static与多态及向下向上转型,及多态调用总结
- 自动根据键盘位置调整UITextView的高度
- 【Kafka】报错:Error while fetching metadata with correlation id 1 : {topic_lcc=LEADER_NOT_AVAILABLE}
- 北方方言的拼音及解释
- pandas.Series.values
- 视频教程-三课时精通matlab拉普拉斯变换和逆变换-Matlab
- mysql 唯一性榆树_榆树有多少种
- phpmyadmin突破secure_file_priv写shell 的渗透
- 计算机网络——网络层:控制层面
- 磁盘空间清理·微信文件夹
- iOS 调整图片尺寸和大小的两个方法
- Hbase——练习4
- 华为电脑怎么不上鸿蒙,我找不到不喜欢华为鸿蒙操作系统的理由
- 最早的计算机网络游戏,手机网络游戏早期发展史——图文游戏