面向过程,
面向函数,reduce(add,[1,2,3])
面向对象
面向对象的三大特性: 封装, 继承, 多态
先看这个例子

##定义类的过程
class Animal: ##__init__构造函数,当实例化时会自动取调用##self实质上是实例化的对象本身 def __init__(self,name,age,weight):##类的属性self.name=nameself.age=ageself.weight=weight# 析构函数; 一般用作类的清理工作,自动调用;def __del__(self):print "delete........"
##实例化对象的过程 cat使实例化的一个对象,实例化的属性name,age,weight
cat=Animal('fentiao',10,13)
print cat.name
print cat.age
print cat
---->>结果
fentiao
10
13
<__main__.Animal instance at 0x7fb31c2033f8>
delete........

定义一个类

经典类的格式python2.x
class 类名:def __init__(self):self后可以跟类的属性
变量名=类名(添加类的属性)
类名后面有括号的类,称为新式类;python2.xpython3.x
括号里面的内容是父类的名称;程序中,所有类的父类都是 object;
class Animals(object):pass
print Animals
<class '__main__.Animals'>

方法的调用,一般方法函数名建议使用动词
类的方法 ==== 函数在类中定义的函数叫做方法 ;
类的方法中, python 解释器要求第一个形参必须是 self

import random
import time
class Animal:def __init__(self,name,age,weight):self.name=nameself.age=ageself.weight=weightdef eat(self):print 'eating...'time.sleep(random.random())self.weight+=1print "%s now weight:%s" %(self.name,self.weight)def play(self):print 'playing...'time.sleep(random.random())self.weight-=1print "%s now weight:%s" % (self.name, self.weight)def __del__(self):print '清理中...'
cat = Animal('fentiao',10,12)
print cat.name , cat.age,cat.weight
cat.eat()
cat.play()
del cat
---->>结果
fentiao 10 12
eating...
fentiao now weight:13
playing...
fentiao now weight:12
清理中...

封装,封装实际上是把数据封装到某个地方, 以后再去调用被封装在某处的内容或者数据;

封装数据
调用封装数据
通过对象直接调用;
通过self间接调用

class People():def __init__(self,name,age,gender):self.name=nameself.age=ageself.gender=genderdef goHome(self):print '%s,%s岁,%s,辍学回家' %(self.name,self.age,self.gender)def kanChai(self):print '%s,%s岁,%s,上山去砍柴' % (self.name, self.age, self.gender)def quXiFu(self):print '%s,%s岁,%s,开车娶媳妇' % (self.name, self.age, self.gender)laoli =People('老李',18,'男')
laoli.quXiFu()
xiao=People('校思浩',22,'男')
xiao.kanChai()
tang=People('唐浩',10,'女')
tang.goHome()

继承

-父类和子类; 基类和派生类;
-注意: 类的属性名和方法名不同相同;
-建议:
-属性名用名词;eg:name, age, weight;
-方法名建议用动词; eg: eat, drink, get_weight;

第一种情况,子类不存在__init__函数

class Animal(object):def __init__(self,name,age,weight):self.name=nameself.age=ageself.weight=weightdef eat(self):print 'eating...'def play(self):print 'playing...'##Cat: 子类,/派生类; Animal:父类/基类;
# 子类不存在__init__函数, 调用父类的;
# 子类存在__init__函数, 调用子类的;
class Cat(Animal):passjumao = Cat('jumao',12,14)
print jumao
jumao.play()
---->>
<__main__.Cat object at 0x7f387cb14f50>
playing...

第二种情况:存在__init__函数,执行报错,子类Cat存在__ini__函数,而且参数有两个self和country,很明显子类没有调用Animal父类,

如果子类存在构造函数有想调用父类构造函数怎么办?第一种继承方法:可维护性低
-Animal.init(self,name,age,weight)


class Animal(object):def __init__(self,name,age,weight):self.name=nameself.age=ageself.weight=weightdef eat(self):print 'eating...'def play(self):print 'playing...'
class Cat(Animal):def __init__(self,name,age,weight,country):Animal.__init__(self,name,age,weight)self.name = nameself.age = ageself.weight = weightself.country=countryjumao = Cat('jumao',12,14,'CHINA')
print jumao.name,jumao.age,jumao.country
jumao.play()
---->>
jumao 12 CHINA
playing...

第二种继承方法:可维护性高

class Animal(object):def __init__(self,name,age,weight):self.name=nameself.age=ageself.weight=weightdef eat(self):print 'eating...'def play(self):print 'playing...'
class Cat(Animal):def __init__(self,name,age,weight,country):super(Cat,self).__init__(name,age,weight)self.country=countryjumao = Cat('jumao',12,14,'CHINA')
print jumao.name,jumao.age,jumao.country
jumao.play()
--->>
jumao 12 CHINA
playing...

多继承

新式类多继承时, 继承算法是广度优先; 查看方式A.mro()
A - (B,C) -D

经典类多继承时, 继承算法是深度优先;

新式类

class D(object):def test(self):print "D test"class C(D):def test(self):print "C test"class B(D):pass# def test(self):#     print "B test"class A(B,C):pass# def test(self):#     print "A test"a=A()
a.test()
print A.mro()
--->>结果:A首先继承B的属性,但是B此时为空,没有构造函数,与时去继承C,最后执行C的__init__函数,A.mro()是继承的一个顺序
C test
[<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.D'>, <type 'object'>]

经典类:没有*.mro()属性

class D():def test(self):print "D test"class C(D):def test(self):print "C test"class B(D):pass# def test(self):#     print "B test"class A(B,C):pass# def test(self):#     print "A test"a=A()
a.test()
--->>结果,A没有构造函数,所以第一时间会去继承B的构造函数,B为空,接着深度挖掘去继承B的父类D的属性,
D test

多态:当父类和子类有相同的方法时, 调用优先执行子类的方法;

实验说明1:子类和父类doc方法共存,调用子类doc方法

class Student(object):def __init__(self,name='xiaoming',score=300):self.name=nameself.__score = scoredef doc(self):print '这时父类doc方法'class MathStudnet(Student):passdef doc(self):print '这时子类doc方法'
a=MathStudnet('xiaoli',50)
print a.name
a.doc()
---->>结果
xiaoli
这时子类doc方法

实验说明2:子类无doc方法共存,调用父类doc方法

class Student(object):def __init__(self,name='xiaoming',score=300):self.name=nameself.__score = scoredef doc(self):print '这时父类doc方法'class MathStudnet(Student):passa=MathStudnet('xiaoli',50)
print a.name
a.doc()
---->>结果:
xiaoli
这时父类doc方法

类属性(一)

class Animal(object):"""Animal class"""passprint Animal.mro()
print Animal.__name__
print Animal.__bases__
print Animal.__doc__,'\n'
print "*"*20+"分割线"+"*"*20,'\n'cat = Animal()print cat.__class__
print cat.__module__---->>结果:
[<class '__main__.Animal'>, <type 'object'>]
Animal
(<type 'object'>,)
Animal class ********************分割线******************** <class '__main__.Animal'>
__main__

关于module

在Package/package01/module01中定义Animal新式类

在modelu02中导入该模块,查看cat类模块名

两个特别的函数(魔术函数):__repr__(self):和__str__(self):

__repr__(self):调试时自动调用,__str__(self):打印对象时自动调用

class Animal(object):def __init__(self,name):self.name = namedef __repr__(self):"""调试时自动调用, a = Animal("xxx")   a:return:"""return "Animals:%s" %(self.name)def __str__(self):"""打印对象时,自动调用"""return  "%s" %(self.name)a = Animal('fentiao')print a

实验:

class Animal(object):def __init__(self,name):self.name=namedef __repr__(self):return '据说调试时自动调用它__repr__(self)'def __str__(self):return '据说打印时自动调用它__str__(self):'dog = Animal('habagou')
print dog
---->>结果
据说打印时自动调用它__str__(self):

面向对象化(封装,继承,多态)相关推荐

  1. c语言编程 菲薄拉,C语言设计模式-封装-继承-多态

    快过年了,手头的工作慢慢也就少了,所以,研究技术的时间就多了很多时间,前些天在CSDN一博客看到有大牛在讨论C的设计模式,正好看到了,我也有兴趣转发,修改,研究一下. 记得读大学的时候,老师就告诉我们 ...

  2. 大数据笔记8—java基础篇4(面向对象-封装-继承-多态)

    面向对象 一.面向对象 1.面向过程 1.2.举例 1.3.总结 二.面向对象 1.简述 2.举例 3.思想特点 2.1.类的定义格式 2.1.1.简述 2.2.2.格式 2.3.3.示例 三.类的使 ...

  3. 小白理解——封装继承多态

                                      一.封装 是什么:首先是抽象,把事物抽象成一个类,其次才是封装.对外表示为一个对象,隐藏对象的属性和动作实现的细节,仅对外公开接口. ...

  4. 面向对象 编程及面向对象三大属性:封装 继承 多态

    面向对象 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构. ...

  5. 白话文带你了解 封装 继承 多态

    这里讲的仅仅是带你理解 封装 继承 多态 染好您可以移步去别的文章学习具体的实现 (只是个人理解 您可以不爱,请别伤害哦!) 首先你要知道 java是面向对象的,说白了就是我拿你当个人,请认清你的地位 ...

  6. Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态

    Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...

  7. python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)

    面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...

  8. python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态

    六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...

  9. python--编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音------使用类的封装继承多态的问题/使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息

    编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音 ------使用类的封装继承多态的问题 class Instrumnet():#乐器类def make_sound(self):pa ...

  10. Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态

    Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...

最新文章

  1. 青岛中专学计算机哪个学校比较好,青岛最好的中专学校是哪个
  2. replace和replacAll
  3. linux mysql udf渗透测试
  4. 一个草根交通研究员的拼车产品分析
  5. db2主键自增和oracle,oracle_浅析常用数据库的自增字段创建方法汇总,DB2复制代码 代码如下:CREATEnbsp - phpStudy...
  6. IIS错误与解决方法
  7. java简单毕设_计算机毕业设计之自定义毕设课题需要如何确定工作量
  8. python selenium-9 grid模式
  9. 云上远程运维的最后那点担心,“云梯”帮你解决
  10. 【Docker】Docker java shell ssh
  11. Python爬虫入门之使用Redis+Flask维护动态代理池
  12. Scrapyd API的安装
  13. 轻松构建微服务之分布式配置中心
  14. 麻省理工18年春软件构造课程阅读08“可变性与不变性”
  15. python实现可视化数独求解器(附代码链接及点点讲解)
  16. 重庆计算机应用高级工程师,重庆高级园林工程师职称评审条件
  17. system libzip must be upgraded to version >= 0.11
  18. 【JAVA学习】六、设计模式
  19. android TextView 异常换行问题
  20. 40万奖金 | 阿里云天池第三届数据库性能大赛,广邀英才挑战创新上云

热门文章

  1. h3c 云服务器操作系统,产品技术-H3C CloudOS云操作系统电信版-新华三集团-H3C
  2. [iOS开发]weak底层原理
  3. 如何将BMP文件转换为JPG文件
  4. 四面阿里软件测试被刷,怒刷三个月测试面试题,成功进入哔哩哔哩
  5. pyinstaller打包有pandas和numpy库过程中遇到的bug及处理
  6. 计算机行业的薪资真的有那么高吗?讲真,有的一毕业就失业,有的一毕业就拿 20k+
  7. 游戏美术师的火绝对不是捧出来的!不看不知道游戏模型师这么吃香
  8. python打印一年的日历_python一年月份_Python程序可打印任何一年的日历
  9. linux各个版本简介 (未完待续)
  10. win7桌面图标箭头怎么去掉