廖雪峰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 ...
随机推荐
- Odoo Documentation : Recordsets
Other recordset operations Recordsets are iterable(可迭代的) so the usual Python tools are available for ...
- NVIDIA驱动安装、CUDA安装、cudnn安装
1.禁用 nouveau 驱动 sudo vim /etc/modprobe.d/nvidia-installer-disable-nouveau.conf 或者 sudo vim /etc/modp ...
- Django项目:CRM(客户关系管理系统)--70--60PerfectCRM实现CRM学生上课记录
#urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...
- PHP实现记录浏览历史页面
<?php /******* 说明:cookie只能保存字符串 本实例中,需要保存多个URL(历史访问记录),思路是先将URL数组转为字符串,然后保存,读取时,再循环读取 *******/ // ...
- jeecms 修改后台访问路径
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_30553235/article/details/74971414 我使用的是jeecms ...
- PLSQLDeveloper链接报错 解决办法
PLSQL Developer 9.06.1665中文破解版 亲们,win7 64位系统现在还没有PLSQLDeveloper可以使用,但是怎么办呢.好的,下面教大家怎么在64位系统下安装PLSQLD ...
- vue 图片上传功能
这次做了vue页面的图片上传功能,不带裁剪功能的! 首先是html代码,在input框上添加change事件,如下: <ul class="clearfix"> ...
- 更改电脑用户名(可更改C:\Users\用户名)
参考:http://blog.csdn.net/zhang_jinhe/article/details/40624847 假设我们需要将帐户A改名为B. 首先我们需要用另一个管理员帐户C登陆系统. 1 ...
- LUOGU P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper
题目描述 A little known fact about Bessie and friends is that they love stair climbing races. A better k ...
- USACO 2.1.4
/* ID: weitong4 LANG: C++ TASK: holstein */ #include<stdio.h> #include<string.h> #define ...