博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 24day--python面向对象编程
阅读量:7027 次
发布时间:2019-06-28

本文共 3752 字,大约阅读时间需要 12 分钟。

首先说明一下说有程序中都会出现的语句:if __name__ == "__main__"

通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明');在你自己眼中,你是你自己(__name__ == '__main__')。

if __name__ == '__main__'的意思是:

当.py文件被直接运行时,if __name__ =='__main__'之下的代码块将被运行;

当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。

一、编程的三大范式:

1、面向过程编程

2、函数式编程

3、面向对象编程

二、什么是面向对象编程:

面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。

类就是一个模板,模板里可以包含多个函数,函数里实现一些功能

对象则是根据模板创建的实例,通过实例对象可以执行类中的函数

1 class Protection: 2     def __init__(self,name,): 3         self.name = name 4     def diff_cur(self): 5         print('%s have diff_cur function'%self.name) 6     def distance(self): 7         print('%s have distance function'%self.name) 8     def over_current(self): 9         print('%s have over_currrent function'%self.name)10 csc103 = Protection('线路光差保护')11 csc103.diff_cur()12 csc103.over_current()13 csc101 = Protection('线路距离保护')14 csc101.distance()15 csc101.over_current()

三、面向对象的三大特性:继承、封装、多态

1、对于面向对象的封装来说,其实就是使用构造方法将内容封装到 对象 中,然后通过对象直接或者self间接获取被封装的内容

练习一:在终端输出如下信息

  • 小明,10岁,男,上山去砍柴
  • 小明,10岁,男,开车去东北
  • 小明,10岁,男,最爱大保健
  • 老李,90岁,男,上山去砍柴
  • 老李,90岁,男,开车去东北
  • 老李,90岁,男,最爱大保健

函数式编程:

1 def kanchai(name, age, gender): 2     print "%s,%s岁,%s,上山去砍柴" %(name, age, gender) 3  4  5 def qudongbei(name, age, gender): 6     print "%s,%s岁,%s,开车去东北" %(name, age, gender) 7  8  9 def dabaojian(name, age, gender):10     print "%s,%s岁,%s,最爱大保健" %(name, age, gender)11 12 13 kanchai('小明', 10, '男')14 qudongbei('小明', 10, '男')15 dabaojian('小明', 10, '男')16 17 18 kanchai('老李', 90, '男')19 qudongbei('老李', 90, '男')20 dabaojian('老李', 90, '男')

面向对象编程:

1 class Foo: 2      3     def __init__(self, name, age ,gender): 4         self.name = name 5         self.age = age 6         self.gender = gender 7  8     def kanchai(self): 9         print "%s,%s岁,%s,上山去砍柴" %(self.name, self.age, self.gender)10 11     def qudongbei(self):12         print "%s,%s岁,%s,开车去东北" %(self.name, self.age, self.gender)13 14     def dabaojian(self):15         print "%s,%s岁,%s,最爱大保健" %(self.name, self.age, self.gender)16 17 18 xiaoming = Foo('小明', 10, '男')19 xiaoming.kanchai()20 xiaoming.qudongbei()21 xiaoming.dabaojian()22 23 laoli = Foo('老李', 90, '男')24 laoli.kanchai()25 laoli.qudongbei()26 laoli.dabaojian()

2、继承:

1 class people: 2  3     def __init__(self, name, age, weight): 4         self.name = name 5         self.age = age 6         self.__weight = weight 7  8     def speak(self): 9         print("%s 说: 我 %d 岁。" % (self.name, self.age))10 11 # 单继承示例12 class student(people):13 14     def __init__(self, name, age, weight, grade):15         # 调用父类的实例化方法16         people.__init__(self, name, age, weight)17         self.grade = grade18 19     # 重写父类的speak方法20     def speak(self):21         print("%s 说: 我 %d 岁了,我在读 %d 年级" % (self.name, self.age, self.grade))22 23 s = student('ken', 10, 30, 3)24 s.speak()

 

3、多态

狗、猫、猪都继承了动物类,并各自重写了kind方法。show_kind()函数接收一个animal参数,并调用它的kind方法。可以看出,无论我们给animal传递的是狗、猫还是猪,都能正确的调用相应的方法,打印对应的信息。这就是多态。

实际上,由于Python的动态语言特性,传递给函数show_kind()的参数animal可以是 任何的类型,只要它有一个kind()的方法即可。动态语言调用实例方法时不检查类型,只要方法存在,参数正确,就可以调用。这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。

1 class Animal: 2  3     def kind(self): 4         print("i am animal") 5  6  7 class Dog(Animal): 8  9     def kind(self):10         print("i am a dog")11 12 13 class Cat(Animal):14 15     def kind(self):16         print("i am a cat")17 18 19 class Pig(Animal):20 21     def kind(self):22         print("i am a pig")23 24 # 这个函数接收一个animal参数,并调用它的kind方法25 def show_kind(animal):26     animal.kind()27 28 29 d = Dog()30 c = Cat()31 p = Pig()32 33 show_kind(d)34 show_kind(c)35 show_kind(p)36 37 ------------------38 打印结果:39 40 i am a dog41 i am a cat42 i am a pig

 

转载于:https://www.cnblogs.com/yuzhiboyou/p/10179746.html

你可能感兴趣的文章
工厂方法模式
查看>>
360安全卫士怎么登录问题
查看>>
linux下的DNS缓存服务
查看>>
实现一键分享的代码
查看>>
详解Linux运维工程师必备技能
查看>>
PowerDesigner
查看>>
硬盘MBR,GPT分区简介
查看>>
[20181109]12c sqlplus rowprefetch参数5
查看>>
存储的瓶颈(4)
查看>>
skynet之伪取消定时器
查看>>
Unity 各平台中的路径
查看>>
整理了一下eclipse 快捷键注释的一份文档
查看>>
浅谈微信三级分销系统的漏洞
查看>>
bupt summer training for 16 #1 ——简单题目
查看>>
【Udacity】朴素贝叶斯
查看>>
shader 讲解的第二天 把兰伯特模型改成半兰泊特模型 函数图形绘制工具
查看>>
python3.5安装Numpy、mayploylib、opencv等额外库
查看>>
优雅绝妙的Javascript跨域问题解决方案
查看>>
Java 接口技术 Interface
查看>>
day1作业登录接口总结
查看>>