python面向对象部分简单整理

面向对象 VS 面向过程面向过程    面向过程的程序设计的核心是过程(流水线式思维)    优点:        极大的降低了写程序的复杂度    缺点:        一整个过程(流水线)只能解决一个问题,若问题更改,代码几乎要全部重写。    应用场景:        一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等。        更加适合瀑布流式的产品开发环境中

面向对象    面向对象的程序设计的核心是对象(上帝式思维)    优点是:        解决了程序的扩展性

缺点:        可控性差,无法像面向过程那样及其精准的处理某一问题    应用场景:        需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等        更加适合敏捷开发(迭代式)产品开发环境中

类基本格式class Person:   #定义一个人类

role = ‘person‘  #人的角色属性都是人

def __init__(self, name):        self.name = name  # 每一个角色都有自己的昵称;

def walk(self):  #人都可以走路,也就是有一个走路方法,也叫动态属性        print("person is walking...")

类的两种作用:    属性引用和实例化    print(Person.role)  #查看人的role属性    print(Person.walk)  #引用人的走路方法,注意,这里不是在调用

实例化:    类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征    实例化的过程就是类——>对象的过程

语法:对象名 = 类名(参数)egg = Person(‘egon‘)  #类名()就等于在执行Person.__init__()执行完__init__()就会返回一个对象。这个对象类似一个字典,存着属于这个人本身的一些属性和方法。

查看属性和调用方法print(egg.name)     #查看属性直接 对象名.属性名print(egg.walk())   #调用方法,对象名.方法名()

self:    在实例化时自动将对象/实例本身传给__init__的第一个参数

类属性的补充    一:我们定义的类的属性到底存到哪里了?有两种方式查看        dir(类名):查出的是一个名字列表        类名.__dict__:查出的是一个字典,key为属性名,value为属性值

二:特殊的类属性        类名.__name__# 类的名字(字符串)        类名.__doc__# 类的文档字符串        类名.__base__# 类的第一个父类        类名.__bases__# 类所有父类构成的元组        类名.__dict__# 类的字典属性        类名.__module__# 类定义所在的模块        类名.__class__# 实例对应的类(仅新式类中)

对象    对象是关于类而实际存在的一个例子,即实例

面向对象的定义及调用的固定格式class 类名:    def __init__(self,参数1,参数2):        self.对象的属性1 = 参数1        self.对象的属性2 = 参数2

def 方法名(self):pass

def 方法名2(self):pass

对象名 = 类名(1,2)  #对象就是实例,代表一个具体的东西                  #类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法                  #括号里传参数,参数不需要传self,其他与init中的形参一一对应                  #结果返回一个对象对象名.对象的属性1   #查看对象的属性,直接用 对象名.属性名 即可对象名.方法名()     #调用类中的方法,直接用 对象名.方法名() 即可

类命名空间与对象、实例的命名空间    创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性    其中类的数据属性是共享给所有对象的    而类的动态属性是绑定到所有对象的

类的两种属性:    静态属性和动态属性        静态属性就是直接在类中定义的变量        动态属性就是定义在类中的方法

组合    软件重用的重要方式除了继承之外还有另外一种方式,即:组合    组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合    当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好

面向对象三大特性:继承、封装、多态继承    继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类单继承与多继承实例class ParentClass1: #定义父类    pass

class ParentClass2: #定义父类    pass

class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass    pass

class SubClass2(ParentClass1,ParentClass2): #python支持多继承,用逗号分隔开多个继承的类    pass

继承与抽象继承:    是基于抽象的结果,通过编程语言去实现它,肯定是先经历抽象这个过程,才能通过继承的方式去表达出抽象的结构。抽象:    只是分析和设计的过程中,一个动作或者说一种技巧,通过抽象可以得到类

继承与重用性派生

super    在python3中,子类执行父类的方法可以直接用super方法.

通过继承建立了派生类与基类之间的关系,它是一种‘是‘的关系,比如白马是马,人是动物。当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好,比如教授是老师

抽象类与接口类接口类继承有两种用途:    一:继承基类的方法,并且做出自己的改变或者扩展(代码重用)    二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,          子类继承接口类,并且实现接口中的功能

继承的第一种含义意义并不很大,甚至常常是有害的。因为它使得子类与基类出现强耦合。继承的第二种含义非常重要。它又叫“接口继承”。    接口继承实质上是要求“做出一个良好的抽象,这个抽象规定了一个兼容接口,使得外部调用者无需关心具体细节,    可一视同仁的处理实现了特定接口的所有对象”——这在程序设计上,叫做归一化。        归一化使得高层的外部使用者可以不加区分的处理所有接口兼容的对象集合

依赖倒置原则:    高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该应该依赖细节;细节应该依赖抽象。    换言之,要针对接口编程,而不是针对实现编程

抽象类    抽象类只能被继承,不能被实例化

抽象类的本质还是类,指的是一组类的相似性,包括数据属性和函数属性,而接口只强调函数属性的相似性。抽象类是一个介于类和接口直接的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计在python中,并没有接口类这种东西,即便不通过专门的模块定义接口,我们也应该有一些基本的概念。

多继承问题    在继承抽象类的过程中,应该尽量避免多继承;    而在继承接口的时候,应该要多继承接口            接口隔离原则:            使用多个专门的接口,而不使用单一的总接口。即客户端不应该依赖那些不需要的接口。

方法的实现    在抽象类中,我们可以对一些抽象方法做出基础实现;    而在接口类中,任何方法都只是一种规范,具体的功能需要子类实现

继承    类如果继承了多个类,寻找其方法的方式有两种:深度优先和广度优先


    经典类 ------- 深度优先    新式类 ------- 广度优先    取决于当前类或者父类是否继承object类

继承的作用:    减少代码的重用    提高代码可读性    规范编程模式

多态    多态指的是一类事物有多种形态多态性    什么是多态动态绑定(在继承的背景下使用时,有时也称为多态性)    多态性是指在不考虑实例类型的情况下使用实例

封装    隐藏对象的属性和实现细节,仅对外提供公共访问方式。优点:    将变化隔离、便于使用、提高复用性、提高安全性封装原则    将不需要对外提供的内容都隐藏起来;    把属性都隐藏,提供公共方法对其访问。

私有变量和私有方法    在python中用双下划线开头的方式将属性隐藏起来(设置成私有的)

propertyclassmethodstaticmethod

面向对象之进阶isinstance(obj,cls)检查是否obj是否是类 cls 的对象issubclass(sub, super)检查sub类是否是 super 类的派生类

反射    通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)hasattr 检测是否含有某属性getattr 获取属性setattr 设置属性delattr 删除属性

改变对象的字符串显示__str__,__repr__自定制格式化字符串__format__

__del__    析构方法,当对象在内存中被释放时,自动触发执行。无需定义,无需关心python内存分配与释放

item系列__getitem____setitem____delitem__

__new__

__call__  对象后面加括号,触发执行。

__len__

__hash__

__eq__

原文地址:https://www.cnblogs.com/ngz311616/p/9470207.html

时间: 2024-10-21 03:32:47

python面向对象部分简单整理的相关文章

Python面向对象-day07

写在前面 上课第七天,打卡: 时间的高效利用: 前言: 今天egon老师补充了下 is 和 == 的区别,整理如下:Python中变量的属性以及判断方法 一.面向过程和面向对象 - 1.面向过程 核心是过程,过程就是解决问题的步骤:流水线.机械式: 优点:复杂的问题简单化,分成多个功能单元: 缺点:可扩展性差 应用:Linux内核.httpd.git - 2.面向对象 核心是对象: 要理解对象,应该把自己当做上帝,在上帝眼里一切存在的事物都是对象,不存在的也可以创建出来: 对象是 特征(变量)和

Python面向对象之:三大特性:继承,封装,多态。

前言: python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到?个对象中. 把固定功能的代码封装到?个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分析. 比如. 你写了?个很?B的函数. 那这个也可以被称为封装. 在?向对象思想中. 是把?些看似?关紧要的内容组合到?起统?进?存储和使?. 这就是封装. 2. 继承: ?类可以?动拥有?类中除了私有属性外的其他所有内容. 说?了, ??可以随便?爹的东?. 但是朋友们, ?定要认清楚?个

Python3+Selenium2完整的自动化测试实现之旅(五):自动化测试框架、Python面向对象以及POM设计模型简介

前言 之前的系列博客,陆续学习整理了自动化测试环境的搭建.IE和Chrome浏览器驱动的配置.selenium-webdriver模块封装的元素定位以及控制浏览器.处理警示框.鼠标键盘等方法的使用,这些内容还需要后续多加练习掌握,以达到灵活运用的程度.but,这仅仅只是开始,说明咱们能够使用selenium框架下的webdriver写出一个个测试用例脚本,也仅仅写给自己看看,如果需要写100条.1000条测试脚本,并能够高效快速的编写完成并批量执行,且要看到完整的执行结果,失败多少,成功多少,等

19.Python面向对象之:三大特性:继承,封装,多态。

前言: python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到?个对象中. 把固定功能的代码封装到?个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分析. 比如. 你写了?个很?B的函数. 那这个也可以被称为封装. 在?向对象思想中. 是把?些看似?关紧要 的内容组合到?起统?进?存储和使?. 这就是封装. 2. 继承: ?类可以?动拥有?类中除了私有属性外的其他所有内容. 说?了, ??可以随便?爹的东?. 但是朋友们, ?定要认 清楚

Python 面向对象class(2)

Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们先来简单的了解下面向对象的一些基本特征. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定

Python面向对象(2)

1.除了封装,Python面向对象还有继承这一功能,如下代码,这是简单的继承功能. class Animal: def chi(self): print(self.name+' 吃') def he(self): print(self.name + ' 喝') class Cat: def __init__(self, name): self.name = name def jiao(self): print('瞄') class Dog(Animal):#继承Animal这个父类,拥有父类的方

python 面向对象(进阶篇)

上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数 面向对象三大特性:封装.继承和多态 本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象

python 面向对象 进阶篇

在上篇<python面向对象>中,简单介绍了python中面向对象的基本知识 在这篇博客中,详细介绍python类的成员,成员修饰符,类的特殊成员. 类的成员 类的成员分为三种:字段,方法和属性 所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的多少,在内存中只创建一份. 字段 字段包括普通字段和静态字段.静态字段,保存在类中.普通字段,保存在对象中. class FOO: country = “中国

Python面向对象编程-封装

1引言 你点击了桌面上的Chrome图标,一个浏览器窗口出现了,输入网址就可以在Internet世界愉快玩耍.这一切是怎么实现的呢?Chromium这个多进程的程序是如何启动各个进程的呢?浏览器主进程(界面进程)启动了哪些线程?如何启动的呢?这些问题一直萦绕在心头,一起来看看源代码吧.本文主要针对Chromium for Mac的源代码,其它操作系统大同小异. 2背景知识 浏览器作为一个应用程序,是以进程的形式运行在操作系统上的.首先,Chromium是一个多进程的应用程序,我们需要了解Chro