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中对象的一些说明

  1. 检查对象类型最佳的方式是利用内置函数 isinstance(object,type)
  2. 所有对象都有引用计数,当一个对象的引用计数归零时,他将会被垃圾收集机制处理掉。
  3. 对于像字符串和数字这样的不可变对象,a=b,实际上是创建了一个新的副本。
  4. 浅复制将创建一个新对象,但是它里面包含的值是对原始对象中包含的项的引用
  5. 深复制将创建一个新对象,并且递归地复制它所包含的所有对象。可以使用copy.deepcopy()函数完成该工作。
  6. 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]]

最新文章

  1. Async和Await异步编程的原理
  2. 解决SQLSERVER数据库表被琐死!
  3. Windows2003中IIS的安全设置技巧
  4. [MAC] Mac OS X下快速复制文件路径的方法
  5. Oracle学习整理
  6. linux中断的上半部和下半部 【转】
  7. Raspberry Pi B+ 定时向物联网yeelink上传CPU GPU温度
  8. git使用备忘
  9. 控制器view加载
  10. 标准的数据获取 -ios
  11. android设备中USB转串口demo 下载
  12. JavaScript(3)—— 正则表达式
  13. Java内存模型四
  14. Python接口自动化--post提交的四种数据类型 4
  15. Spring MVC测试框架详解——服务端测试
  16. ev3_basic——HITCON CTF 2018
  17. 协程IO多路复用
  18. 千兆网口POE供电
  19. POJ2226Muddy Fields
  20. 第10天:apply和call、bind、函数作为参数、返回值使用、闭包、递归的样例

热门文章

  1. vi 替换操作
  2. JavaWeb Cookie详解
  3. swift 可变參数
  4. java模拟异步消息的发送与回调
  5. jdk1.6 升级到 jdk1.7
  6. Apollo-open-capacity-platform 微服务能力开发平台 (转)
  7. webpack 功能大全 【环境配置】
  8. ubuntu16.04 opencv3.4.1 opencv-contribute3.4.1 compile
  9. Linux 查看tomcat占用的端口号
  10. homebrew可以管理众多开源软件的安装和卸载