Python 類和對象 Class vs Object
類別定義
class 類別名:
例如:
>>> class Point:
... x = 0.0
... y = 0.0
1. 宣告
>>> p1 = Point()
>>> p1.x, p1.y
(0.0, 0.0)
2. 賦値
>>> p1.x = 5.0
>>> p1.y = 6.0
>>> p1.x, p1.y
(5.0, 6.0)
3. 位址指向
>>> p1
<__main__.Point object at 0x00000000021B22E8>
>>> id(p1.x)
30060832
>>> id(p1.y)
30060808
4. 別名 Alias
>>> p2 = p1
>>> id(p1)
>>> id(p2)
>>> p1 == p2
True
5. 複製 Copy
>>> id(p1)
>>> import copy
>>> p3 = copy.copy(p1)
>>> id (p3)
>>> p1 == p3
False
6. 物件嵌入物件
>>> class Phone:
... area_code = 0
... number = 0
...
>>> class Person:
... name = ''
... age = 0
... phone = Phone()
...
>>> p1 = Person()
>>> p1.name = 'John'
>>> p1.age = 20
>>> p1.phone.code = 2
>>> p1.phone.number = 995576
>>> id(p1)
31859152
>>> p2 = Person()
>>> p2.name = 'Mary'
>>> p2.age = 38
>>> p2.phone.code = 3
>>> p2.phone.number = 773322
>>> id(p2)
31859264
>>> import copy
>>> print(p1.name,p1.age,p1.phone.code,p1.phone.number)
John 20 3 773322
>>> print(p2.name,p2.age,p2.phone.code,p2.phone.number)
Mary 38 3 773322
>>>
注意到沒? 雖然 p1 與 p2 是不同的物件,但卻共享相同的物件 Phone,所以 p2.Phone 更新時, p1.Phone 也同樣更新,p1.Phone 與 p2.Phone 共享一個位址。
事實上 p1 與 p2 的 Phone 並沒有在 RAM 中被分配 Allocate 空間存儲,所以才有這現象。我們必須以 p1.Phone() 與 p2.Phone() 各自分配存儲空間,例如:
>>> p1.phone = Phone()
>>> p1.phone.code = 2
>>> p1.phone.number = 995576
>>> print(p1.name,p1.age,p1.phone.code,p1.phone.number)
John 20 2 995576
>>> p2.phone = Phone()
>>> p2.phone.code = 3
>>> p2.phone.number = 773322
>>> print(p2.name,p2.age,p2.phone.code,p2.phone.number)
Mary 38 3 773322
>>>
7. 物件複製 Copy
>>> import copy
>>> p2 = copy.copy(p1)
>>> print(p1.name,p1.age,p1.phone.code,p1.phone.number)
John 20 2 995576
>>> print(p2.name,p2.age,p2.phone.code,p2.phone.number)
John 20 2 995576
>>> id(p1)
31859152
>>> id(p2)
31859656
>>> p1 == p2
False
/end
Python 類和對象 Class vs Object的更多相关文章
- pycharm install python packaging tools时遇到AttributeError: '_NamespacePath' object has no attribute 'sort'错误
pycharm install python packaging tools时报错AttributeError: '_NamespacePath' object has no attribute 's ...
- Python 類別 class 的繼承 Inheritance
既然 Python 是面向物件 Object Oriented 語言,它就有類別 Class 與物件 Object 的概念. 甚麼是類別 class ? 簡單講: 類別好比蓋房子的施工藍圖 Blue ...
- python中使用zip函数出现<zip object at 0x02A9E418>
在Python中使用zip函数,出现<zip object at 0x02A9E418>错误的原因是,你是用的是python2点多的版本,python3.0对python做了改动 zip方 ...
- Python学习札记(四十) 面向对象编程 Object Oriented Program 11
参考:使用元类 NOTE: type() 1.type()函数可以用于检查一个类或者变量的类型. #!/usr/bin/env python3 class Myclass(object): " ...
- Python学习札记(三十七) 面向对象编程 Object Oriented Program 8 @property
参考:@property NOTE 1.在绑定参数时,为了避免对属性不符合逻辑的操作,需要对传入的参数进行审核. #!/usr/bin/env python3 class MyClass(object ...
- Python学习札记(三十三) 面向对象编程 Object Oriented Program 4
参考:继承和多态 NOTE 著名的开闭原则: 对扩展开放:允许新增Animal子类: 对修改封闭:不需要修改依赖Animal类型的Animal_func()等函数. 1.eg. #!/usr/bin/ ...
- Python学习札记(三十一) 面向对象编程 Object Oriented Program 2
参考:类和实例 注意理解第七点. NOTE: 1.类是抽象的模板,比如Student类,实例是根据类创建出来的一个个具体的"对象",每个对象都拥有相同的方法,但各自的数据可能不同. ...
- Python之运算符以及基本数据类型的object
一.运算符 1.算术运算符 % 求余运算 ** 幂-返回x的y次幂 // 取整数-返回商的整数部分,例:9//2输出结果是4 2.比较运算符 == 等于 != 不等于 <> 不等于 ...
- python调用WebService遇到的问题'Document' object has no attribute 'set'
代码: from suds import WebFault from suds.client import Client url = 'http://******/bns/PtDataSvc.asmx ...
随机推荐
- SpringCloud-创建服务消费者-Ribbon方式(附代码下载)
场景 SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...
- git版本控制入门--码云
1.下载git:https://git-scm.com/download 2.安装过程一直点下一步即可. 3.进入刚创建的文件夹 4.在此时登录码云,创建项目.项目名称最好与文件夹名称 ...
- spark-3.0 application 调度算法解析
spark 各个版本的application 调度算法还是有这明显的不同之处的.从spark1.3.0 到 spark 1.6.1.spark2.0 到 现在最新的spark 3.0 ,调度算法有了一 ...
- C#开发微信小程序(四)
导航:C#开发微信小程序系列 关于小程序项目结构,框架介绍,组件说明等,请查看微信小程序官方文档,关于以下贴出来的代码部分我只是截取了一些片段,方便说明问题,如果需要查看完整源代码,可以在我的项目库中 ...
- Java 程序员最喜欢使用的日常工具
多年来,Java 始终是企业应用程序的支柱.最近几年,Java 也是 Android 开发的首选编程语言.不过开发人员如何使用这种语言呢?一项新的研究阐明了主要使用 Java 的开发人员的工作类型,以 ...
- 一道ctf-内存取证volatility的学习使用
环境:kali 0x00 volatility官方文档 https://github.com/volatilityfoundation/volatility 在分析之前,需要先判断当前的镜像信息,分析 ...
- Android 项目优化(二):启动页面优化
一.启动页黑屏的问题 1.1 问题现象描述 Android App 启动页面黑屏的问题,现象表现为:Android 开发 App 启动时若没有做特殊处理的话,会出现一瞬间的白屏现象.即使启动页界面就加 ...
- synchronized到底锁住的是谁?
本文代码仓库:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/sync 先来一道校招级并发编程笔试题 题 ...
- 阿里云RDS for SQL Serrver关于权限的一个严重Bug
阿里云RDS for SQL Server的账号管理有不少小Bug,而且有一个很严重的Bug:任何普通账号,都能创建数据库.注意,我这里是说任意普通账号,任意任意普通账号!任意任意普通账号!重要的事情 ...
- How to Create Transportable Tablespaces Where the Source and Destination are ASM-Based (Doc ID 394798.1)
How to Create Transportable Tablespaces Where the Source and Destination are ASM-Based (Doc ID 39479 ...