我不是程序员,我正在尝试学习python.但我对对象实例化有点困惑.我认为Class就像模板一样,对象是基于模板制作(或实例化).这是否意味着一旦创建了对象(例如,classinst1 = MyClass()),模板中的更改不应该影响对象中的内容?

此外,下面的代码显示我可以更改类变量“common”,但前提是我没有为对象中的“common”变量赋值.如果我在我的对象中指定一个新值“common”(比如classinst1.common = 99),那么更改我的类变量“common”不再影响classinst.common值????

有人可以为我澄清为什么下面的代码表现如此?它是所有OO语言的共同点,还是python的一个古怪方面?

===============

>>> class MyClass(object):

... common = 10

... def __init__(self):

... self.myvar=3

... def myfunction(self,arg1,arg2):

... return self.myvar

...

>>> classinst1 = MyClass()

>>> classinst1.myfunction(1,2)

3

>>> classinst2 = MyClass()

>>> classinst2.common

10

>>> classinst1.common

10

>>> MyClass.common = 50

>>> classinst1.common

50

>>> classinst2.common

50

>>> classinst1.common = 99

>>> classinst2.common

50

>>> classinst1.common

99

>>> MyClass.common = 7000

>>> classinst1.common

99

>>> classinst2.common

7000

解决方法:

您有类声明和实例化的一般概念.但是你的例子中的输出似乎没有意义的原因是实际上有两个变量叫做common.第一个是在类声明中声明并在代码顶部实例化的类变量.这是大多数示例中唯一常见的.

执行此行时:

classinst1.common = 99

您正在创建一个对象变量,classinst1的成员.由于它与类变量具有相同的名称,因此它会隐藏或隐藏MyClass.common.对classinst1.common的所有进一步引用现在引用该对象变量,而对classinst2.common的所有引用继续回退到MyClass.common,因为没有名为common的对象变量是classinst2的成员.

所以当你执行:

MyClass.common = 7000

这会更改MyClass.common但classinst1.common仍然等于99.在您的示例的最后几行中,当您向解释器询问classinst1.common和classinst2.common的值时,前者指的是classinst1对象成员变量常见的后者引用类变量MyClass.common.

标签:python,instantiation

来源: https://codeday.me/bug/20190612/1228849.html

python实例化对象是什么意思_请帮我理解python对象的实例化.相关推荐

  1. 【Python】Python实战从入门到精通之一 -- 教你深入理解Python中的变量和数据类型

    本文是Python实战–从入门到精通系列的第一篇文章: Python实战从入门到精通之一 – 教你深入理解Python中的变量和数据类型 文章目录 1.变量 1.1 变量命名规则 1.2 变量名称错误 ...

  2. new 实例化对象是啥意思_二. 初步认识JS中的类和对象

    1 构造函数的定义 在JS中, 没有类(class)的概念, 主要是通过构造函数来模拟的. 语法 function 构造函数名 () {// 函数体} 使用function关键字表示定义一个构造函数 ...

  3. python刷题一亩三分地_手把手教你用python抓网页数据【一亩三分地论坛数据科学版】...

    前言:. visit 1point3acres.com for more. 数据科学越来越火了,网页是数据很大的一个来源.最近很多人问怎么抓网页数据,据我所知,常见的编程语言(C++,java,pyt ...

  4. python 内存溢出能捕获吗_从0基础学习Python (19)[面向对象开发过程中的异常(捕获异常~相关)]...

    从0基础学习Python (Day19) 面向对象开发过程中的=>异常 什么是异常 ​ 当程序在运行过程中出现的一些错误,或者语法逻辑出现问题,解释器此时无法继续正常执行了,反而出现了一些错误的 ...

  5. python个人博客搭建说明书_技术分享|利用Python Django一步步搭建个人博客(二)...

    原标题:技术分享|利用Python Django一步步搭建个人博客(二) Hello,欢迎来到我们的"利用Python Django一步步搭建个人博客"系列的第二部分.在第一部分中 ...

  6. python网上有免费资源吗_【转载】学习Python无从下手?最好的免费资源想要拿走...

    Python 可以用来做什么? 在我看来,基本上可以不负责任地认为,Python 可以做任何事情.无论是从入门级选手到专业级选手都在做的爬虫,还是Web 程序开发.桌面程序开发还是科学计算.图像处理, ...

  7. python网站有中文界面吗_手把手教你用python开发界面程序

    在本教程中 我们将通过使用Tkinter包编写一些python GUI示例来学习如何开发图形用户界面. Tkinter包是作为标准包随Python一起提供的 所以我们不需要安装任何东西来使用它. Tk ...

  8. python 自动运维架构师_运维架构师-Python 自动化运维开发-031

    *运维架构师-Python 自动化运维开发-031 十九.Python3 操作数据库 1.Python3 操作 MySQL 1.基本介绍Python3 操作 MySQL 数据库 可以使用的模块是 py ...

  9. python面试题网站有哪些_扣丁学堂解析Python爬虫工程师面试题汇总

    扣丁学堂解析Python爬虫工程师面试题汇总 2018-08-20 11:24:39 1664浏览 今天,扣丁学堂的小编来给大家总结一下Python爬虫的面试技巧,希望给参加Python培训的同学一点 ...

最新文章

  1. 机器学习、超参数、最优超参数、网格搜索、随机搜索、贝叶斯优化、Google Vizier、Adviser
  2. linux脚本发送udp,基于shell脚本实现UDP端口探测
  3. 【Android Gradle 插件】ProductFlavor 配置 ( ProductFlavor#manifestPlaceholders 清单文件占位符配置 )
  4. python成长之路——第四天
  5. Typecho程序伪静态规则大全(包括Linux/Windows
  6. 矩阵二范数(norm)
  7. 应该增加黑样本还是白样本呢
  8. leetcode 421. Maximum XOR of Two Numbers in an Array | 421. 数组中两个数的最大异或值(位运算,Trie前缀树)
  9. sql 拆分_实践参考:MySQL架构设计从开发规范、选型、拆分到减压实战指南
  10. Java开发常用命名规范
  11. 【声传播】——球面波的反射
  12. android-getTextSize返回值是以像素(px)为单位的,setTextSize()以sp为单位
  13. 智能硬件无线通信协议的那些事儿(一)
  14. 交换机入门书籍推荐_网络工程学习方法/路线/专业书籍推荐
  15. win10 office提示‘VBE6EXT.OLB不能被加载‘怎么办
  16. 红米2a手机出现android,红米2A的手机系统是什么?红米2A能升级安卓5.0吗?
  17. 三洋服务器显示F6,三洋空调故障代码有哪些?
  18. CF 375C Circling Round Treasures(状态压缩+bfs)
  19. 什么是 Android?
  20. 带反义词的成语-含有反义词的成语

热门文章

  1. C#将引入可空的引用类型
  2. Visual Studio 2017 新功能(上)
  3. .net core 源码解析-mvc route的注册,激活,调用流程(三)
  4. 非涉密计算机检查的通知,关于开展非涉密计算机及可移动存储介质专项清理活动的紧急通知...
  5. [转]分布式事务之TCC服务设计和实现注意事项
  6. 打开vs2010,提示无效的许可证数据,需要重新安装
  7. C#趣味程序---求两个数的最大公约数和最小公倍数
  8. C语言试题七十六之请编写函实现百钱买百鸡
  9. android开发板出错,为开发板编译时出错是什么原因
  10. CCF-CSP认证201312-1(出现次数最多的数)