PYDay14:反射面向对象基础-封装集成多态
Posted john221100
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PYDay14:反射面向对象基础-封装集成多态相关的知识,希望对你有一定的参考价值。
1、反射
通过字符串的形式,导入模块
再通过字符串的形式,去模块中寻找指定的函数并执行
eg:__import__(模块)
更加字符串的形式去对象(某个模块)中操作其成员
常用方法:
getattr()
hasattr()
setattr()
delattr()
扩展:
r = __import__(\'www.iclinux.com\',fromlist=True)
反射示例:
使用反射,无需依照函数的数量来写判断了
2、面向对象基础:
C# Java 只能使用面向对象编程
Pyhon Ruby:即可函数编程又可面向对象编程
面向对象编程不是所有的情况都适用
- 面向过程:根据业务逻辑从上到下写垒代码
- 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
- 面向对象:对函数进行分类和封装,让开发“更快更好更强...
class iclinux: def fetch(self,backend): pass def add_record(self,backend,record) pass obj = iclinux() obj.fetch(\'xxx\') obj.add_record(\'xxx\',yyy)
class:关键字,表示类
创建对象,类名称后冒号即可
类中函数第一个参数必须是self
类中函数叫做方法
__init__:对象中称为构造方法,也可称为初始化
__del__:解释器销毁对象时自动调用,对象中称为析构方法
self为形式参数,python内部传递
obj=》self ;;;‘xxx’==》backend
4.1封装
使用封装,参数制药传递异常,后面都可以使用
使用场景:当统一类型的方法具有相同参数时,直接封装到对象即可
使用场景:把类当作模板,创建多个对象(对象内封装的数据不一样)
4.2继承:
父类也叫基类,子类也叫派生类
其他语音如java、c#只能集成一个父类,python的类可同事集成多个类,继承顺序和优先级为:自己》左》左父》右》右父
4.3多态
Pyhon不支持Java和C#这一类强类型语言中多态的写法,但是原生多态,其Python崇尚“鸭子类型”。
class F1: pass class S1(F1): def show(self): print \'S1.show\' class S2(F1): def show(self): print \'S2.show\' def Func(obj): print obj.show() s1_obj = S1() Func(s1_obj) s2_obj = S2() Func(s2_obj)
5、接口
通常以I开头,只写方法,不写内容。接口上的方法,类里面都要有实现
接口按类型可分为代码级别的端口和业务级别的端口
6、练习
游戏人生程序
1、创建三个游戏人物,分别是:
- 苍井井,女,18,初始战斗力1000
- 东尼木木,男,20,初始战斗力1800
- 波多多,女,19,初始战斗力2500
2、游戏场景,分别:
- 草丛战斗,消耗200战斗力
- 自我修炼,增长100战斗力
- 多人游戏,消耗500战斗力
# -*- coding:utf-8 -*- # ##################### 定义实现功能的类 ##################### class Person: def __init__(self, na, gen, age, fig): self.name = na self.gender = gen self.age = age self.fight =fig def grassland(self): """注释:草丛战斗,消耗200战斗力""" self.fight = self.fight - 200 def practice(self): """注释:自我修炼,增长100战斗力""" self.fight = self.fight + 200 def incest(self): """注释:多人游戏,消耗500战斗力""" self.fight = self.fight - 500 def detail(self): """注释:当前对象的详细情况""" temp = "姓名:%s ; 性别:%s ; 年龄:%s ; 战斗力:%s" % (self.name, self.gender, self.age, self.fight) print temp # ##################### 开始游戏 ##################### cang = Person(\'苍井井\', \'女\', 18, 1000) # 创建苍井井角色 dong = Person(\'东尼木木\', \'男\', 20, 1800) # 创建东尼木木角色 bo = Person(\'波多多\', \'女\', 19, 2500) # 创建波多多角色 cang.incest() #苍井空参加一次多人游戏 dong.practice()#东尼木木自我修炼了一次 bo.grassland() #波多多参加一次草丛战斗 #输出当前所有人的详细情况 cang.detail() dong.detail() bo.detail() cang.incest() #苍井空又参加一次多人游戏 dong.incest() #东尼木木也参加了一个多人游戏 bo.practice() #波多多自我修炼了一次 #输出当前所有人的详细情况 cang.detail() dong.detail() bo.detail() 游戏人生
以上是关于PYDay14:反射面向对象基础-封装集成多态的主要内容,如果未能解决你的问题,请参考以下文章
Python学习之旅---封装与反射(类的相关知识,面向对象三大特性:继承-多态-封装)
python学习8_1 面向对象(继承多态封装)以及零散概念(组合,property,绑定方法与非绑定方法,反射,内置函数)