Python 基础之面向对象
来源:互联网 发布:淘宝生意参谋手机版 编辑:程序博客网 时间:2024/06/04 18:16
- 面向对象
- 多态
- 多态和方法
- 多态的多种形式
- 封装
- 继承
- 多态
- 类和类型
- 类到底是什么
- 创建一个类
- 继承父类
- 多重继承
面向对象
- 多态:意味着可以对不同类的对象使用相同的操作。
- 封装:对外部世界隐藏对象的工作细节。
- 继承:以普通的类为基础建立专门的类对象。
多态
多态意味着就算不知道变量所引用的对象类型是什么,还是能对它进行操作,而它也会根据对象(或者类)类型的不同而表现出不同的行为。
多态和方法
程序得到了一个对象,但是并不知道它是怎么实现的——它可能有多种“形状”。
绑定到对象特性上面的函数称为方法(method)。
对于一个变量x来说,我们不需要知道他是字符串还是列表,就可以调用它的count方法——不用管它是什么类型(前提是你提供了一个字符作为参数)。
from random import choicex=choice(['Hello,world!',[1,2,'e','e',3]]) #random 中的 choice函数,可以从序列中随机的选出元素给变量赋值print(x.count('e'))
对于上述代码只需要知道x有个叫做count的方法,带有一个字符作为参数,并且返回整数值就够了。
多态的多种形式
任何不知道对象是什么类型,但是又必须为对象实现某种功能的时候,都会用到多态。
例如:
def add(x,y): return x+ya=1b=2print(add(a,b))a='Hello 'b='world!'print(add(a,b))
很多函数和运算符都是多态的——至少你写的大部分程序可能都是,即使你不是有意这样。
封装
封装是对全局作用域中其他区域隐藏多余信息的原则。听着有点像多态——适用对象而不知内部细节。两者概念类似,二者都会帮助处理程序组件而不用过多关注多余细节。
封装并不等同于多态多态。多态可以让用户对于不知道是什么类的对象进行方法调用,而封装是不用关心对象是如何构建的而直接使用。
继承
继承是另外一种懒惰行为。作为一个苦逼的程序员自然不想把同一段代码写好几次。显然可以使用函数来解决。但是倘若现在已经有了一个类,而现在又想创建一个类似的新的类
新的类可能保留了原本的类的大多数方法,可能只需要扩展几个新的方法。在编写新类的时候又不想把旧类的方法全部拷贝过去,那么这个时候就是继承出场的时候了。
类和类型
类到底是什么?
可以将类或多或少的视为种类或者类型的同义词。从很多方面来说,这就是类——一种对象。所有的对象都属于一个类,称为类的实例(instance)。
例如:阿尔托利亚·潘德拉贡 属于“Servant”类的实例。但是“Servant”类是有很多子类诸如“Saber”、“Archer”、“Rider”等类的一般(抽象)类。并且吾王(阿尔托利亚·潘德拉贡)本身也属于“Saber”类。这个时候“Saber”类就是“Servant”类的子类。反过来说“Servant”类是“Saber”类的父类也称超类。
在面向对象的程序设计中,子类的关系是隐式的,一个类的定义取决它所支持的方法。所有类的实例都会包括这些方法。子类也会继承父类的方法。
创建一个类
class + 类名() + “:”
class Person(object): def setName(self,name): self.name = name def getName(self): return self.name def greet(self): print("Hello world!I'm %s." % self.name)foo=Person()bar=Person()foo.setName("Asunna")bar.setName('Saber')foo.greet()bar.greet()#结果:# Hello world!I'm Asunna.# Hello world!I'm Saber.
self表示对自身对象的引用。在调用foo的setName方法时,foo自动的将自己作为第一参数传入函数中——因此形象的命名为self。
继承父类
将其他类名写在class语句后的圆括号内就表示可以继承父类
class Filter(object): def init(self): self.blocked = [] def filter(self, sequence): return [x for x in sequence if x not in self.blocked]class SPAMFilter(Filter): def init(self): #重写父类中的init方法 self.blocked=["SPAM"]f=Filter()f.init()print(f.filter([1,2,3]))s=SPAMFilter()s.init()print(s.filter(["Spam","SPAM","SPAM",'spam',"ASPM"]))#result:# [1, 2, 3]# ['Spam', 'spam', 'ASPM']
多重继承
子类可以继承多个父类,方法如下:
class Cal(object): passclass Tal(object): passclass TC(Cal,Tal): pass
在使用多重继承时,有个需要注意的地方。如果一个方法从多个超类中继承(换句话说你有两个具有相同名字的不同方法),那么必须要注意一下超类的顺序:先继承的类中方法会重写后继承的类中的方法。
如果父类们共享一个父类,那么在查找给定方法或者特性的时访问的父类顺序称为MRO(Method Resolution Order,方法判定顺序)。
- Python 基础之面向对象
- python之面向对象编程基础
- Python基础之五面向对象编程
- python基础之面向对象02
- python基础之面向对象01
- Python 之 基础面向对象编程
- Python面向对象基础
- python面向对象基础
- python 面向对象基础
- python面向对象基础
- python 面向对象 基础
- Python基础-面向对象基础
- python 之面向对象
- python之面向对象
- Python之面向对象
- Python编程基础之十二面向对象编程
- Python基础之六面向对象高级编程
- python学习之路-基础篇-面向对象-day05
- 表格 td 长度的问题
- c++ boost 库中提供的share_ptr(智能指针)
- MD5加密解密
- debug调试jdk源码
- iOS-87-解决相机扫码报错*** -[AVCaptureMetadataOutput setMetadataObjectTypes:] Unsupported type found
- Python 基础之面向对象
- 百度世界大会 | 李彦宏:无人驾驶罚单已经来了,量产还会远吗
- 近期deep learning做图像质量评价(image quality assessment)的论文
- 论文笔记-Arbitrary-Oriented Scene Text Detection via Rotation Proposals
- 热点 | 10岁男孩骗过Face ID,成功解锁母亲的iPhone X
- 行业 | 高通沈劲:在人工智能领域,中国很少会参照美国
- UITableView/UICollectionView调用reloadData刷新时界面闪烁
- AI英雄 | 对话投资大咖Dyson:人工智能无处不在 却又相当脆弱
- QT查询数据库中的数据在tableview显示