Python:笔记(3)——面向对象编程
Python:笔记(3)——面向对象编程
类和面向对象编程
1、类的创建

说明:和Java不同的是,我们不需要显示的说明类的字段属性,并且可以在后面动态的添加。
2、构造函数
构造函数的功能毋庸置疑,可以让我们在定义对象的时候执行一些必要的初始化,在Python中我们通过__init__方法来实现

说明:这里有一些需要注意的地方
首先,关于self参数
其次,实现访问控制
如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线_,在Python中,实例的变量名如果以 _ 开头,就变成了一个私有变量(private),建议只在内部访问。
3、关于继承
关于继承的好处,主要是避免一些重复的代码工作,这个也无需多言,我们看一下,在Python中

当然,我们也可以重写父类的一些方法,来定制功能

同样,这里也可以体验一下“多态”,比如run_twice()方法,可以打印Dog、Cat的信息两次,其实这里传入任何对象都是可以的,只要有run方法即可!

说明:Python允许多重继承
class Dog(Mammal, RunnableMixIn, CarnivorousMixIn):
pass
4、获取对象信息
类似于Java中的反射,可以窥探对象的信息

5、使用__slots__限制实例属性
Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性:

6、@Property
在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改:
s = Student()
s.score = 9999
但是在Python中,把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值,于是,我们就拥有一个可控的属性操作:

7、JSON
简单演示DICT的JSON编码和解码。

但是,对象不能直接转换!需要写成如下格式。

类型与对象
术语
程序中存储的所有数据都是对象。每个对象都有一个身份、一个类别和一个值。
如:a=42,就是用值42创建了一个整数对象。
大多数对象都拥有大量特点的属性和方法。
- 属性就是与对象相关的值。
- 方法就是被调用时将在对象上执行某些操作的函数。
- 使用 . 运算符可以访问属性和方法。
Python中对象的一些说明
- 检查对象类型最佳的方式是利用内置函数 isinstance(object,type)
- 所有对象都有引用计数,当一个对象的引用计数归零时,他将会被垃圾收集机制处理掉。
- 对于像字符串和数字这样的不可变对象,a=b,实际上是创建了一个新的副本。
- 浅复制将创建一个新对象,但是它里面包含的值是对原始对象中包含的项的引用。
- 深复制将创建一个新对象,并且递归地复制它所包含的所有对象。可以使用copy.deepcopy()函数完成该工作。
- Python中的所有对象都是第一类的,也就是说能够命名的所有对象都可以当做数据处理。
演示浅层和深层复制
1 #深层复制
2 import copy
3 a=[1,2,[3,4]]
4 b=copy.deepcopy(a)
5 b[2][0] =-100
6 print(b)
7 print(a) 【结果】:
[1, 2, [-100, 4]]
[1, 2, [3, 4]]
1 # 浅层复制
2 a=[1,2,[3,4]]
3 b=list(a) #创建a的一个浅复制
4 print(b is a)
5 b.append(100)
6 print(b)
7 print(a)
8 b[2][0]=-100
9 print(b)
10 print(a) 【结果】:
False
[1, 2, [3, 4], 100]
[1, 2, [3, 4]]
[1, 2, [-100, 4], 100]
[1, 2, [-100, 4]]
Python:笔记(3)——面向对象编程的更多相关文章
- 8.python笔记之面向对象基础
title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...
- Python学习之==>面向对象编程(二)
一.类的特殊成员 我们在Python学习之==>面向对象编程(一)中已经介绍过了构造方法和析构方法,构造方法是在实例化时自动执行的方法,而析构方法是在实例被销毁的时候被执行,Python类成员中 ...
- Python 中的面向对象编程
面向对象编程(Object-oriented programming, OOP)是一种基于对象概念的编程范式,可包含属性(attribute)形式的数据以及方法(method)形式的代码.另一种对 O ...
- python 学习笔记7 面向对象编程
一.概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." ...
- python学习笔记(七):面向对象编程、类
一.面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一 ...
- python自动化测试学习笔记-7面向对象编程,类,继承,实例变量,邮件
面向对象编程(OOP)术语: class TestClass(object): val1 = 100 def __init__(self): self.val2 = 200 ...
- python中的面向对象编程
在python中几乎可以完成C++里所有面向对象编程的元素. 继承:python支持多继承: class Derived(base1, base2, base3): pass 多态:python中的所 ...
- Day7 - Python基础7 面向对象编程进阶
Python之路,Day7 - 面向对象编程进阶 本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个 ...
- Day6 - Python基础6 面向对象编程
Python之路,Day6 - 面向对象学习 本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发 ...
随机推荐
- Ubuntu 开机引导文件 /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. GRUB_DEFAUL ...
- Ajax系列之中的一个:ajax旧貌换新颜
什么是ajax? 什么是Ajax? Ajax就是Asynchronous +JavaScript+XML.中文翻译为:异步的javascript与XML,它是利用javascript语言和xml数据实 ...
- shell定期转移日志文件到云盘并定期删除云盘文件
shell 脚本定期处理如下: cat /home/backup/logs_delete.sh #!/bin/bash /bin/find /data/logs/nginx/ -name " ...
- 02-1设置第一启动项--电脑怎么进入BIOS的方法集合
电脑怎么进入BIOS的方法集合 很多时候为了对电脑进行相关设置,我们必须进入电脑的bios界面,但是不同的电脑进入bios的方法各不相同,小编今天就在这儿将各种电脑进入bios的方法汇总一下,希望对你 ...
- 哇哦!恍然大悟般的“share”功能的实现!
有一个问题一直困扰着我,也是我一直没有时间去了解和学习的,那就是前端(移动端)实现分享到微信.QQ好友.QQ空间.新浪微博等等平台的功能实现,虽然之前有做过,但是都是上一个领导自己写好的,我直接拿来用 ...
- Devops成功的八大炫酷工具
原文链接:http://www.infoworld.com/article/3031009/devops/8-more-cool-tools-for-devops-success.html 为自动化和 ...
- Android Studio 2.0 正式版公布啦 (首次中文翻译)
Android Studio 2.0 公布了,添加了一些新特性: 1. 更加完好的 Instant Run 2. 更快的 Android Emulator 3.GPU Debugger Preview ...
- Apache安全和强化的十三个技巧
Apache是一个很受欢迎的web服务器软件,其安全性对于网站的安全运营可谓生死攸关.下面介绍一些可帮助管理员在Linux上配置Apache确保其安全的方法和技巧. 本文假设你知道这些基本知识: 文档 ...
- [译]GLUT教程 - 键盘
Lighthouse3d.com >> GLUT Tutorial >> Input >> Keyboard GLUT可以让应用程序自动监测键盘输入,包括普通按键和 ...
- 安装SQLserver 2014(For AlwaysOn)
SQLserver 2014 AlwaysOn在SQLserver 2012的基础之上,进行了非常大程度的添加.如能够通过"加入 Azure 副本向导"简化了用于 AlwaysOn ...


