• 面向对象

    • 多态

      • 多态和方法
      • 多态的多种形式
    • 封装
    • 继承
  • 类和类型
    • 类到底是什么
    • 创建一个类
    • 继承父类
    • 多重继承

面向对象

  • 多态:意味着可以对不同类的对象使用相同的操作。
  • 封装:对外部世界隐藏对象的工作细节。
  • 继承:以普通的类为基础建立专门的类对象。

多态

多态意味着就算不知道变量所引用的对象类型是什么,还是能对它进行操作,而它也会根据对象(或者类)类型的不同而表现出不同的行为。

多态和方法

程序得到了一个对象,但是并不知道它是怎么实现的——它可能有多种“形状”。

绑定到对象特性上面的函数称为方法(method)。

对于一个变量x来说,我们不需要知道他是字符串还是列表,就可以调用它的count方法——不用管它是什么类型(前提是你提供了一个字符作为参数)。

from random import choice
x=choice(['Hello,world!',[1,2,'e','e',3]])  #random 中的 choice函数,可以从序列中随机的选出元素给变量赋值
print(x.count('e'))

对于上述代码只需要知道x有个叫做count的方法,带有一个字符作为参数,并且返回整数值就够了。

多态的多种形式

任何不知道对象是什么类型,但是又必须为对象实现某种功能的时候,都会用到多态。

例如:

def add(x,y):return x+ya=1
b=2
print(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 = namedef getName(self):return self.namedef 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):pass
class Tal(object):passclass TC(Cal,Tal):pass

在使用多重继承时,有个需要注意的地方。如果一个方法从多个超类中继承(换句话说你有两个具有相同名字的不同方法),那么必须要注意一下超类的顺序:先继承的类中方法会重写后继承的类中的方法。

如果父类们共享一个父类,那么在查找给定方法或者特性的时访问的父类顺序称为MRO(Method Resolution Order,方法判定顺序)。

Python 基础之面向对象相关推荐

  1. python基础之面向对象编程

    python基础之面向对象编程 面向对象编程思想 面向对象是一门编程思想,编程思想仅仅是一门思想,与任何技术无关 核心是对象两字,对象可以理解为特征与技能的结合体 基于该编程思想编写程序,就好比创造世 ...

  2. 5.Python基础之面向对象

    文章目录 Python基础之面向对象 面向对象的三大特性 类和对象的关系 类的组成 类的书写规则 实例化对象 检测类和对象的成员 类和对象成员的操作 类成员操作 对象成员操作 关于self 封装特性 ...

  3. Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程–>错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个人 ...

  4. (转)Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...

  5. Python基础_07_面向对象1

    python基础7_面向对象1 文章目录 python基础7_面向对象1 一.面向对象:类和对象.魔法方法 1. 面向对象编程概述 1.1[了解]面向过程和面向对象的区别 1.2[知道]类和对象介绍 ...

  6. 【Python基础】面向对象封装 案例(二)

    目录 案例二 1.首先开发 枪类 2.接着开发 士兵类 3.开发 开火类. 案例一在这里: [Python基础]面向对象封装 案例(一) 案例二 仍然是一步一步开发.同时,下面的第3小步是完整代码,亦 ...

  7. python基础以及面向对象

    python基础 python基础 第一单元 Python解释器和IDE的安装和初步使用 **一.昨日知识点回顾** **二.本单元知识点概述** (Ⅰ)指定教材 (Ⅱ)知识点概述 (Ⅲ)教学时长 * ...

  8. Day7 - Python基础7 面向对象编程进阶 --转自金角大王

    本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 经典 ...

  9. [转载] python基础:面向对象-封装

    参考链接: Python中的面向对象编程2(数据隐藏和对象打印) 文章目录 1.封装的含义2.封装示例1.python中封装功能的实现 3.封装的好处1.封装数据2.降低复杂度 4.封装的特性1.@p ...

  10. Python基础08 面向对象的基本概念

    Python使用类(class)和对象(object),进行面向对象(object-oriented programming,简称OOP)的编程. 面向对象的最主要目的是提高程序的重复使用性.我们这么 ...

最新文章

  1. 科学说忘记一个人只要七年
  2. C++实现用堆求最小的k个数
  3. Linux System Programming --Chapter Eight
  4. 在pycharm创建scrapy项目
  5. 剑指Offer——不用加减乘除做加法
  6. DM9000调试记录
  7. python sort怎么用,Linux Sort命令详细用法(有实例)
  8. .NET 指南:包装异常
  9. 关于JNI的几个问题
  10. java反射怎么获取结构体_java反射-使用反射获取类的所有信息
  11. 20172301 2018-2019-1《程序设计与数据结构》课程总结
  12. 【Kettle】作业和转换中的内置变量
  13. Html 中表单提交的一些知识总结——防止表单自动提交,以及submit和button提交表单的区别...
  14. [记录] Ubuntu 配置Apache虚拟站点
  15. 11月3日 迅雷白金会员vip账号分享 91freevip 23:00更新
  16. [实践篇]13.9 如何使用gcore(ramdump)排查内存黑洞?
  17. 金蝶K3修改库存更新控制方式
  18. 计算机窗口闪屏,电脑闪屏怎么办?如何解决电脑经常闪屏问题
  19. 一阶线性常微分方程解法
  20. python二维随机游走_Python模拟随机游走图形效果示例

热门文章

  1. 纯电动汽车动力性经济性开发程序 Matlab AppDesigner 汽车性能开发工具 电动汽车动力性计算 电动汽车动力总成匹配
  2. 中国制造走出国门:谁说了算?
  3. 我的电子书共享站,欢迎大家访问下载经典电子书
  4. Glide4 加载失败时显示默认图片
  5. linux系统截图有快捷键吗,linux系统下ubuntu 中截图工具及快捷键设置
  6. SELINUX是个大坑
  7. 一个动态计算京东金条利息的类 winform程序实例
  8. 【原创意】一个市值估算超亿的创意——愤怒的小猪(谢绝抄袭和冒名顶替)...
  9. 打印所有的水仙花数,所谓水仙花数是指一个三位数,其中各位数字的立方和等于该数本身,如153=1^3+5^3+3^3。
  10. 21. 深度解读苹果M1芯片