廖雪峰Python总结4
面向对象编程
将计算机程序视为一系列的命令集合。包含:
- 数据
- 操作数据的函数
Python中,所有的数据类型都可以视为对象。
面向对象特点:封装,继承,多态。
类的函数和普通函数:类的第一个参数永远是实例变量self,并且调用时不用传递该参数。
如果要让内部属性不被外部访问,可以把属性名称前加上两个下划线__。如果实例的变量名以__开头,就变成了一个私有变量。可以内部访问,不能外部访问。


继承与多态
新的类称为子类(Subclass),而被继承的类被称为基类,父类或者超类(Base class,Super class)。
判断一个变量是否是某个类型可以用isinstance(变量,类型)判断。
在继承关系中,如果一个实例的数据类型是某个子类,那么他的数据类型也可以被看做是父类,但是反过来就不可以。

获取对象信息:
1.type():判断对象类型,当一个变量指向函数或类时,也可以用type()判断。type返回对应的class类型。
2.isinstance():判断一个对象是否是某种类型。
3.dir():获得对象的所有属性和方法。它返回一个包含字符串的list。类似于__xxx__的属性和方法在python中都是有特殊用途的。比如__len__返回长度。如果你调用len()函数试图获取一个对象的长度,实际上,在len()函数内部,它自动去调用该对象的__len__()方法。以下代码等价:
len('ABC')
'ABC'.__len__()
常用定制对象:
1.__slots__:定义类时,限制该类的实例能添加的属性。(只对当前类起作用,除非在子类中也定义__slots__,这样,子类允许定义的属性就是自生的__slots__加上分类的)

2.@property:后续更新
3.__str__:使用print(对象名)返回字符串描述,给用户看的。
4.__repr__:直接调用对象名返回的字符串描述,给系统看的。
5.__iter__:类想被for ... in 循环,实现类似于list循环功能,该方法返回一个迭代对象。for循环不断调用failed迭代对象的__next__()方法拿到循环下一个值,指导遇到StopIteration时退出。
我们以斐波那契数列为例,写一个Fib类,可以作用于for循环:
class Fib(object):
def __init__(self):
self.a,self.b=0,1 def __iter__(self):
return self def __next__(self):
self.a,self.b=self.b,self.a+self.b
if self.a>100000:
raise StopIteration()
return self.a for n in Fib():
print(n)
6.__getitem__:能够使用功能下标取出元素。
class Fib(object):
def __getitem__(self,n):
a,b=1,1
for x in range(n):
a,b=b,a+b
return a f=Fib()
for i in range(10):
print(f[i])
但是若想要实现切片,实现负数取元素,实现隔几个元素取元素,还需要在__getitem__中做出正确的操作。
若想要是实现切片操作,如下:
class Fib(object):
def __getitem__(self,n):
if isinstance(n,int):
a,b=1,1
for x in range(n):
a,b=b,a+b
return a
if isinstance(n,slice):
start=n.start
stop=n.stop
if start is None:
start=0
a,b=1,1
L=[]
for x in range(stop):
if x>=start:
L.append(a)
a,b=b,a+b
return L f=Fib()
print(f[0:5])
7.__getattr__:当对象调用不存在的属性时,Python解释器会试图调用__getattr__方法来尝试获得属性。当在__getattr__中没有的属性时,则返回自己约定的AttributeError的错误。

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

多重继承:

通过多重继承,一个子类就可以同时获得多个父类的所有功能。
元类:(后续操作)
廖雪峰Python总结4的更多相关文章
- 廖雪峰Python电子书总结
		函数 1.注意:函数的默认参数必须指向不可变对象 未修改前: def add_end(L=[]): L.append('END') return L 存在的问题:如果连续调用多次,会出现多个 'END ... 
- 廖雪峰python教程的第一个疑问
		函数的参数一节中提到: def add_end(L = []); L.append('END') return L 正常调用add_end时(也就是有参数传入时): >>> add_ ... 
- 廖雪峰Python实战day1
		一.按照廖雪峰的教程,安装开发环境,问题不大. 1.异步框架aiohttp:$pip3 install aiohttp 2.前端模板引擎jinja2:$ pip3 install jinja2 3.安 ... 
- 【python】廖雪峰python教程学习--基础
		No1: 目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的 No2: 用r''表示''内部的字符串默认不转义 No3: 以'''开头,敲回车可以换行 No4: 布尔 ... 
- 廖雪峰  ----   Python教程
		这是小白的Python新手教程,具有如下特点: 中文,免费,零起点,完整示例,基于最新的Python 3版本. Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学 ... 
- 廖雪峰Python学习笔记——类和实例
		Class MyList(list): __metaclass__ = ListMetaclass #它表示在创建MyList这个类时,必须通过 ListMetaclass这个元类的LIstMetac ... 
- 廖雪峰Python学习笔记——序列化
		序列化 定义:程序运行时所有变量都存在内存中,把变量从内存中变成可存储或可传输的过程称为序列化pickling,在其他语言中称为serialization,marshalling,flattening ... 
- 廖雪峰Python学习笔记——使用元类
		元类(MetaClasses) 元类提供了一个改变Python类行为的有效方式. 元类的定义是“一个类的类”.任何实例是它自己的类都是元类. class demo(object): pass obj ... 
- 廖雪峰Python笔记
		△命令行模式和Python交互模式 在Windows开始菜单选择“命令提示符”,就进入到命令行模式,它的提示符类似C:\>:在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就 ... 
- 廖雪峰Python总结5
		1.错误,调试和测试 程序编写造成了bug(必须修复) 用户输入出错(通过检查用户输入) 异常:无法在程序运行过程中预测的.异常是必须被处理的,否则程序会因为各种问题终止并且退出 1.try: try ... 
随机推荐
- 【python之路45】tornado的用法 (三)
			参考:https://www.cnblogs.com/sunshuhai/articles/6253815.html 一.cookie用法补充 1.cookie的应用场景 浏览器端保存的键值对,每次访 ... 
- sqlserver 如何按年按月创建分区函数
			我创建了分区函数如下:create partition function pf_month1(varchar(8))as range left for values ('20120131','2012 ... 
- js 给链接 url或href或js、css、图片等解决浏览器缓存
			一. 添加时间戳 情况一.链接是常量 var rand = new Date().getTime(); var aLen=document.getElementsByTagName("a&q ... 
- 两周的业余时间,写了个简单的shell
			Linux下的,环境是 Fedora 实现了基本的内部命令功能,及比较完善的内部命令框架. 类似于MFC消息映射表的方式,写完一个内部命令,只需要向这个头文件中,导入一个头文件,再写入命令处理函数,就 ... 
- Leetcode102. Binary Tree Level Order Traversal二叉树的层次遍历
			给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其 ... 
- JAVA面试常见问题之设计模式篇
			1.常见的设计模式 单例模式.工厂模式.建造模式.观察者模式.适配器模式.代理模式.装饰模式. 参考:https://www.cnblogs.com/cr330326/p/5627658.html 2 ... 
- 【python之路33】开发模式单例模式及简单的服务器请求框架原理
			1.单例模式指的是创建单个实例,例如:数据库连接池中包含10个数据库连接,用户访问数据时随机从连接池中拿出一个进行连接,其他用户再次访问时不再创建对象进行连接 #!usr/bin/env python ... 
- 移动端canvas刮刮乐
			<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta cont ... 
- 利用Nginx轻松实现Ajax的跨域请求(前后端分离开发调试必备神技)
			利用Nginx轻松实现浏览器中Ajax的跨域请求(前后端分离开发调试必备神技) 前言 为什么会出现跨域? 造成跨域问题的原因是因为浏览器受到同源策略的限制,也就是说js只能访问和操作自己域下的资源,不 ... 
- 20190814-A Second
			一秒,或是,第二次? 这考试也太频繁了吧…… 考试过程: 看三道题. T1没思路. 然后去厕所清醒了一下. 在厕所的时候,突然想到可以离散化. 于是就这么搞了. 然后去写T2. T2好像是数学题. 于 ... 
