面向对象编程

将计算机程序视为一系列的命令集合。包含:

  • 数据
  • 操作数据的函数

Python中,所有的数据类型都可以视为对象。

面向对象特点:封装,继承,多态。

类的函数和普通函数:类的第一个参数永远是实例变量self,并且调用时不用传递该参数。

如果要让内部属性不被外部访问,可以把属性名称前加上两个下划线__。如果实例的变量名以__开头,就变成了一个私有变量。可以内部访问,不能外部访问。

继承与多态

新的类称为子类(Subclass),而被继承的类被称为基类,父类或者超类(Base class,Super class)。

判断一个变量是否是某个类型可以用isinstance(变量,类型)判断。

在继承关系中,如果一个实例的数据类型是某个子类,那么他的数据类型也可以被看做是父类,但是反过来就不可以。

获取对象信息:

1.type():判断对象类型,当一个变量指向函数或类时,也可以用type()判断。type返回对应的class类型。

2.isinstance():判断一个对象是否是某种类型。

3.dir():获得对象的所有属性和方法。它返回一个包含字符串的list。类似于__xxx__的属性和方法在python中都是有特殊用途的。比如__len__返回长度。如果你调用len()函数试图获取一个对象的长度,实际上,在len()函数内部,它自动去调用该对象的__len__()方法。以下代码等价:

  1. len('ABC')
  2. 'ABC'.__len__()

常用定制对象:

1.__slots__:定义类时,限制该类的实例能添加的属性。(只对当前类起作用,除非在子类中也定义__slots__,这样,子类允许定义的属性就是自生的__slots__加上分类的)

2.@property:后续更新

3.__str__:使用print(对象名)返回字符串描述,给用户看的。

4.__repr__:直接调用对象名返回的字符串描述,给系统看的。

5.__iter__:类想被for ... in 循环,实现类似于list循环功能,该方法返回一个迭代对象。for循环不断调用failed迭代对象的__next__()方法拿到循环下一个值,指导遇到StopIteration时退出。

我们以斐波那契数列为例,写一个Fib类,可以作用于for循环:

  1. class Fib(object):
  2. def __init__(self):
  3. self.a,self.b=0,1
  4.  
  5. def __iter__(self):
  6. return self
  7.  
  8. def __next__(self):
  9. self.a,self.b=self.b,self.a+self.b
  10. if self.a>100000:
  11. raise StopIteration()
  12. return self.a
  13.  
  14. for n in Fib():
  15. print(n)

6.__getitem__:能够使用功能下标取出元素。

  1. class Fib(object):
  2. def __getitem__(self,n):
  3. a,b=1,1
  4. for x in range(n):
  5. a,b=b,a+b
  6. return a
  7.  
  8. f=Fib()
  9. for i in range(10):
  10. print(f[i])

但是若想要实现切片,实现负数取元素,实现隔几个元素取元素,还需要在__getitem__中做出正确的操作。

若想要是实现切片操作,如下:

  1. class Fib(object):
  2. def __getitem__(self,n):
  3. if isinstance(n,int):
  4. a,b=1,1
  5. for x in range(n):
  6. a,b=b,a+b
  7. return a
  8. if isinstance(n,slice):
  9. start=n.start
  10. stop=n.stop
  11. if start is None:
  12. start=0
  13. a,b=1,1
  14. L=[]
  15. for x in range(stop):
  16. if x>=start:
  17. L.append(a)
  18. a,b=b,a+b
  19. return L
  20.  
  21. f=Fib()
  22. print(f[0:5])

7.__getattr__:当对象调用不存在的属性时,Python解释器会试图调用__getattr__方法来尝试获得属性。当在__getattr__中没有的属性时,则返回自己约定的AttributeError的错误。

8.__call__:可以用:对象名()调用定义的__call__()方法。

多重继承:

通过多重继承,一个子类就可以同时获得多个父类的所有功能。

元类:(后续操作)

廖雪峰Python总结4的更多相关文章

  1. 廖雪峰Python电子书总结

    函数 1.注意:函数的默认参数必须指向不可变对象 未修改前: def add_end(L=[]): L.append('END') return L 存在的问题:如果连续调用多次,会出现多个 'END ...

  2. 廖雪峰python教程的第一个疑问

    函数的参数一节中提到: def add_end(L = []); L.append('END') return L 正常调用add_end时(也就是有参数传入时): >>> add_ ...

  3. 廖雪峰Python实战day1

    一.按照廖雪峰的教程,安装开发环境,问题不大. 1.异步框架aiohttp:$pip3 install aiohttp 2.前端模板引擎jinja2:$ pip3 install jinja2 3.安 ...

  4. 【python】廖雪峰python教程学习--基础

     No1: 目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的 No2: 用r''表示''内部的字符串默认不转义 No3: 以'''开头,敲回车可以换行 No4: 布尔 ...

  5. 廖雪峰 ---- Python教程

    这是小白的Python新手教程,具有如下特点: 中文,免费,零起点,完整示例,基于最新的Python 3版本. Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学 ...

  6. 廖雪峰Python学习笔记——类和实例

    Class MyList(list): __metaclass__ = ListMetaclass #它表示在创建MyList这个类时,必须通过 ListMetaclass这个元类的LIstMetac ...

  7. 廖雪峰Python学习笔记——序列化

    序列化 定义:程序运行时所有变量都存在内存中,把变量从内存中变成可存储或可传输的过程称为序列化pickling,在其他语言中称为serialization,marshalling,flattening ...

  8. 廖雪峰Python学习笔记——使用元类

    元类(MetaClasses) 元类提供了一个改变Python类行为的有效方式. 元类的定义是“一个类的类”.任何实例是它自己的类都是元类. class demo(object): pass obj ...

  9. 廖雪峰Python笔记

    △命令行模式和Python交互模式 在Windows开始菜单选择“命令提示符”,就进入到命令行模式,它的提示符类似C:\>:在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就 ...

  10. 廖雪峰Python总结5

    1.错误,调试和测试 程序编写造成了bug(必须修复) 用户输入出错(通过检查用户输入) 异常:无法在程序运行过程中预测的.异常是必须被处理的,否则程序会因为各种问题终止并且退出 1.try: try ...

随机推荐

  1. Luogu P3835 【模板】可持久化平衡树(fhq Treap)

    P3835 [模板]可持久化平衡树 题意 题目背景 本题为题目普通平衡树的可持久化加强版. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作(对于各个以往的历史版本 ...

  2. 二进制操作(1)–Bytes

    1,Bytes的单元被当作字符串处理. 例如: 有些介绍会声称上述程序会得到这样的结果:b'\x00\x00\x00\x00' 在python v2.7.10上是得不到此结果的. 实际上,如果 typ ...

  3. Elasticsearch系列(一)--入门

    Elasticsearch基于Lucene构建的开源搜索引擎,Java编写,提供restful API,支持横向拓展,能够完成海量数据处理. 应用场景: 1.海量数据分析引擎 2.站内搜索引擎 3.数 ...

  4. SSH协议的Python实现paramiko

    目录 paramiko安装 SSHClient类与SFTPClient类 SSHClient类的方法 SFTPClient类的方法 paramiko的基本使用 paramiko.SSHClient两种 ...

  5. Python-基本文件处理

    目录 文件的类型 什么是文件? 文件的分类 文件的打开与关闭 文件处理的三个步骤 使用方式 爬虫 requests库的使用 文件的类型 什么是文件? 一堆.py/.txt 存储着文字信息文件, 文件的 ...

  6. element-ui 使用笔记

    1,获取级联选择器 cascader的值 获取value值:就是v-model绑定的值, 获取label值:要先给cascader组件一个ref值,然后通过 this.$refs.组件的ref值.cu ...

  7. (转载)关于My97 datepicker与Angular ng-model绑定问题解决。

    转载自 http://zerosoft.blog.51cto.com/679447/1611403 <input type="text" ng-model="d&q ...

  8. 3377加减乘除等于24(原生js实现)

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  9. notes 摘自陶哲轩演讲

    摘自陶哲轩演讲http://www.youku.com/playlist_show/id_5267259.htmlA frog in a well 井底之蛙 Aristotle        亚里士多 ...

  10. 如何理解张量tensor

    1 关于张量的四种定义 “张量”在不同的运用场景下有不同的定义. 第一个定义,张量是多维数组,这个定义常见于各种人工智能软件.听起来还好理解.--本文仅解释此种 2 多维数组 从第一个定义:张量是多维 ...