一、编程范式

  程序员通过特定的语法+数据结构+算法告诉计算机如果执行任务,实现这个过程有不同的编程方式,对这些不同的编程方式进行归纳总结得出来的编程方式类别,即为编程范式

编程范式:面向过程编程、面向对象编程、函数式编程

二、面向对象编程  OOP编程

面向对象编程的使用场合:

     1、需要设定一个模板

2、几个对象拥有相同的参数

3、连接数据库、备份数据库,测试备份文件可用性

面向对象编程的核心特性:

1、类 class

类及时就有相同属性对象的原型/模板,类中封装了对象的共同属性和方法

 class English(object):
def __init__(self,name,age): #构造函数 构造方法=初始化方法
self.name=name #成员属性
self.age=age
def approch(self):
print('%s %age are learning English '%(self.name,self.age))
person1=English('小楠','') #进行实例化, 实例化后产生的对象就是实例,通过__init__()接受参数
person1.approch()

①每个def 函数中都至少一个self参数

②第一个函数__init__(self)为构造函数(方法),或者叫初始化函数,类被实例化的时候会自动调用这个方法

③函数approach(self) 叫做类的方法,动态方法

注意类除了有动态方法,还有一个静态方法,动态属性中参数必须有self,如果需求中有的函数不需要传入这个参数,可以用静态属性来设定一个函数@staticmethod

 class one(object):
@staticmethod
def n1(): #不需要必须填写self,可以传入其他参数
print('我是一个静态方法')
one.n1() #不需要实例化,直接通过类来调用

有上密码呢代码可以看出,静态方法的特性:

① 静态方法也存在于类中,但是不需要self参数,可以是任意个

② 静态方法的调用可以直接调用,不需要实例化,通过类调用即可

④析构方法:

#析构函数:__del__
class one(object):
def __init__(self,name):
self.name=name
def fun(self):
print('%s is classy'%self.name)
def __del__(self):
print('del.................')
per1=one('songxiaonan')
per1.fun() '''__init__:构造函数
__del__:删除已经构造的函数'''

2、对象 

类需要实例化之后才可以被调用, 类实例化之后就是一个实例,即对象。 一个类可以被多次实例化,每个实例(对象)也可以用不同的属性和方法

比如:有一个one1类, 实例化两次

1 person1=English('小楠','')  #进行实例化,   实例化后产生的对象就是实例,通过__init__()接受参数
2 person1.approch()
    实例化后既可以通过实例来调动类中的方法

3、封装

          类封装了:属性和方法

          对象封装了:成员属性   

           类中的属性:成员属性,共有属性,私有属性

 class one(object):
country='China' # 公有属性
def __init__(self,name,age):
self.name=name # 成员属性
self.age=age
self.__weight=30# 私有属性
def shot(self):
print('message:%s %s' %(self.name,self.age) )

私有属性:外部不可以访问,只能在类内部访问的属性。以__开头:self.__name

①如何在外部可以访问私有属性呢?

在类的内部定义一个方法,返回私有属性值,然后在外部调用这个方法

class one(object):
country='China'
def __init__(self,name):
self.name=name
self.__weight=30# 私有属性
def weight(self): #返回私有属性值,外部就可以访问私有属性了
return self.__weight
d1=one('song',22)
print(d1.weight()) #

②如果想通过重新定义一个函数访问,也可以强制访问

 print(d1._one__weight)  #

    公有属性:在类中直接定义,而不是再构造方法中

                          共有属性和构造方法、类的其他方法是平级的,类中的所有方法可以共享该属性

class one(object):
country='China' #共有属性
def __init__(self,name,age):
self.name=name
self.age=age
d1=one('song',22)
print(d1.country) # 输出 China
print(one.country) # 输出 China

共有属性可以通过实例调用,也可以直接通过类来调用

修改共有属性: 是通过类调用该属性进行修改,而不是实例调用该属性进行修改

one.country='US'
print(d1.country) # 输出 US
print(one.country) # 输出 US d1.country='Japan' #注意:这里并不是在修改类的共有属性,而是又重新定义了一个成员属性,和原有的共有属性没有关系
print(d1.country) # 输出 Japan
print(one.country) # 输出 China

4、继承

         继承是面向对象的一个重要特性,继承可以保留原来的功能,又可以在不需要重新编写前类的情况下,对这些功能进行扩展

基类:one1

 class one1(object):
country='China'
def __init__(self,name,age):
self.name=name
self.age=age
self.__weight=30
def shot(self):
print('message:%s %s' %(self.name,self.age) )
def weight(self):
return self.__weight

子类:n1

class n1(one1):
def n1_func(self):
print('%s 的兴趣是:%s'%(self.name,self.hobby))
p1=n1('宋晓楠','')
p1.shot() # 直接可调用父类的shot方法 message:宋晓楠 22
p1.n1_func() # 子类自己的方法 宋晓楠 的兴趣是:学习

如果子类需要有新的参数出入,那么就需要对类的构造方法进行重构,但是子类重构父类的方法后,就会覆盖父类的构造方法,那么如何不覆盖父类的初始化函数同时又重构自己的初始化函数呢?   ——先继承,再重构

class n1(one1):
def __init__(self,name,age,hobby): #如果子类 没有传入新参数的需求,就不需要重构__init__()
one1.__init__(self,name,age) #先继承,再重构 经典类写法
#上句代码 等同于=super(n1,self)__init__(self,name,age) 新式类写法
self.hobby=hobby
def n1_func(self):
print('%s 的兴趣是:%s'%(self.name,self.hobby))
p1=n1('宋晓楠','','学习')
p1.shot() # 直接可调用父类的shot方法 message:宋晓楠 22
p1.n1_func() # 子类自己的方法 宋晓楠 的兴趣是:学习

4.1 多继承:多个父类继承、多级继承

         1、继承多个父类

 class School(object):
def info(self):
print('我是另外一个父类')
class Teacher(SchoolMessage,School): # 继承多个类
def __init__(self,name,age,sex,sala,course):
SchoolMessage.__init__(self,name,age,sex)
self.sala=sala
self.course=course
def teaching(self):
print('我是 %s 老师,所授课程是:%s'%(self.name,self.course))
t1=Teacher('小花',30,'女','','数学')
t1.info() # 输出:我是另外一个父类

2、多级继承

            py3中无论是经典类和新式类,继承调用的时候,都是广度查找:先查找上一级中,上一级没有再去查找上上级'''

class F1(object):
def __int__(self):
print('F1')
def a1(self):
print('F1a1')
def a2(self):
print('F1a2')
class F2(F1):
def __int__(self):
print('F2')
def a1(self):
self.a2()
print('F2a1')
def a2(self):
print('F2a2')
class F3(F2):
def __int__(self):
print('F3')
def a2(self):
print('F2a3') obj=F3()
obj.a1() #多级继承 进行广度查找
'''输出:  F2a3
F2a1'''

  5、多态

作用:接口的重用

 class Animal(object):
def talk(self):
raise NotImplementedError('必须被子类调用才可以。。')
# a=Animal()
# a.talk() # NotImplementedError: 必须被子类调用才可以。。 class cat(Animal):
def talk(self):
print('cat')
class dog(Animal):
def talk(self):
print('dog') b=cat()
b.talk()
c=dog()
c.talk()
  现在只能通过两个实例 b和c分别来调取talk才可以实现talk方法

  多态的意义在于,值通过一个接口就可以实现cat和dog的talk,
  比如: 只通过Animal(obj) 这个接口 将b和c分别传入 就可以实现不同实例的talk   目前 这个需求多态的实现方法:
def Animal(obj):   #在类外面定义一个函数,将实例单过参数传进去
obj.talk()
Animal(b)
Animal(c)
 

          

python_面向对象编程的更多相关文章

  1. python_面向对象——编程步骤

    校园管理系统: 设计一个学校机构管理系统,有总部.分校.有学院.老师.员工,实现具体如下需求: 1.有多个课程,课程要有定价 2.有多个班级,班级跟课程有关联 3.有多个学生,学生报名班级,交这个班级 ...

  2. python_的面向对象编程

    废话不多说,先弄个对象来看看 class Student(object): def __init__(self, name, score): self.name = name self.score = ...

  3. angular2系列教程(六)两种pipe:函数式编程与面向对象编程

    今天,我们要讲的是angualr2的pipe这个知识点. 例子

  4. 带你一分钟理解闭包--js面向对象编程

    上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...

  5. PHP 面向对象编程和设计模式 (1/5) - 抽象类、对象接口、instanceof 和契约式编程

    PHP高级程序设计 学习笔记 2014.06.09 什么是面向对象编程 面向对象编程(Object Oriented Programming,OOP)是一种计算机编程架构.OOP 的一条基本原则是计算 ...

  6. Delphi_09_Delphi_Object_Pascal_面向对象编程

    今天这里讨论一下Delphi中的面向对象编程,这里不做过多过细的讨论,主要做提纲挈领的描述,帮助自己抓做重点. 本随笔分为两部分: 一.面向对象编程 二.面向对象编程详细描述 ------------ ...

  7. python基础-面向对象编程

    一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...

  8. 面向对象编程(OOP)

    什么是面向对象编程,对于面向对象编程与面向过程编程的解释随处可见,个人认为对面向对象编程解释最好的一个定义是:依赖倒转原则是面向对象编程的标志,面向对象编程是一种思想,无论使用哪一种编程语言,如果在编 ...

  9. python 学习笔记7 面向对象编程

    一.概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." ...

随机推荐

  1. php实现设计模式之 抽象工厂模式

    <?php /*抽象工厂模式:提供一个创建一系统相关或相互依赖对象的接口,而无需指定它们具体的类 * 创建型模式 */ //抽象小米工厂,能制造小米一,小米二 abstract class mi ...

  2. 【系统架构】IT职业技能图谱(点开大图查看)

    本文地址 1 程序开发语言综述 2 iOS开发工程师必备技能 3 运维工程师必备技能 4 前端工程师必备技能 5 大数据工程师必备技能 6 云计算工程师必备技能 7 安全工程师必备技能 8 移动无线测 ...

  3. LoadRunner 实现监控Tomcat

    LoadRunenr没有监控Tomcat的专用监控器,为了用lr达到监控tomcat的目的可以通过打开Tomcat自带的Status页面之后,利用lr的关联技术得到相关的数据,把数据输出到lr自定义的 ...

  4. servlet/filter/listener/interceptor区别与联系

    转自:http://www.cnblogs.com/doit8791/p/4209442.html servlet.filter.listener是配置到web.xml中(web.xml 的加载顺序是 ...

  5. Hibernate 参数设置一览表

    Hibernate 参数设置一览表 属性名 用途 hibernate.dialect 一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL. 取值 fu ...

  6. 前后端分离之前端项目构建(grunt+require+angular)

    前言 前段时间做了一个项目,前端开发页面,然后把代码给到后端同学,后端同学通过vm再来渲染页面.后来才发现,这种方式简直是太low了,因为前端代码在服务端同学那里,每次前端需要更改的时候都需要去到服务 ...

  7. HTML5移动端图片左右切换动画

    插件描述:HTML5移动端图片左右切换动画 小海今天要给大家分享一款很不错的图片左右切换焦点图动画,并且支持移动端触摸滑动.功能上,这款HTML5图片播放器支持鼠标滑动.手机端触摸滑动以及自动播放.外 ...

  8. GoogleMap和高德地图最新的瓦片图地址是用什么加密或者压缩

    https://mts1.googleapis.com/vt?pb=!1m4!1m3!1i13!2i2475!3i3029!2m3!1e0!2sm!3i293208756!3m9!2sen-US!3s ...

  9. .NET 4.5 中新提供的压缩类

    Windows8 的开发已经如火如荼开始了,在 Windows8 中提供的 .NET Framework 已经更新到了 4.5 版,其中又增加了一些新的特性,对压缩文件的支持就是其中之一. 在 4.5 ...

  10. 通过Ajax使用FormData对象无刷新上传文件

    写在前面:本文说的这个方案有浏览器兼容性问题:所有主流浏览器的较新版本已经支持这个对象了,比如Chrome 7+.Firefox 4+.IE 10+.Opera 12+.Safari 5+,对兼容性比 ...