17-面向对象编程

 

面向对象编程:

  类的概念:具有相同属性和技能的一类事物。比如(人,动物,鱼....)

  对象:就是对一个类的具体描述。

面向对象编程的优点:

  解决了程序的扩展性,对某一对象单独的修改就会立刻反应到整体中,如果游戏中一个人物参数的特征和技能修改都很容易

缺点:

  可控性差,无法像面向过程的程序流水线式的可以有很精确的预测问题的处理流程和结果,面向对象的程序一旦开始就由面向对象之间的交互解决问题,即使是上帝也无法预测到最终结果,于是我们经常看到一个游戏英雄某一参数的修改极有可能导致硬霸技能的出现,一刀砍死好多人,这个游戏就失去平衡。

应用场景:

  经常需要变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方。

 

类和对象

1.什么是类和对象

python中一切皆为对象,类型就是类,对象是特征(变量)与技能(函数)的结合体,而类是一系列对象共同特征与技能的结合体

2。类的相关知识

声明函数:

1 def functionname(args):
2     '函数文档字符串'
3     函数体
View Code

声明类:

1 '''
2 class 类名:
3     '类的文档字符串'
4     类体
5 '''
6 
7 #我们创建一个类
8 class Data:
9     pass
View Code

类有两种作用:属性引用和实例化

创建一个类:

1 class Garen:        #定义英雄盖伦的类,不同的玩家可以用它实例出自己英雄;
2     camp='Demacia'  #所有玩家的英雄(盖伦)的阵营都是Demacia;
3     def attack(self,enemy):   #普通攻击技能,enemy是敌人;
4         enemy.life_value-=self.aggressivity #根据自己的攻击力,攻击敌人就减掉敌人的生命值
View Code

1)属性引用

>>> Garen.camp #引用类的数据属性,该属性与所有对象/实例共享
'Demacia'
>>> Garen.attack #引用类的函数属性,该属性也共享
<function Garen.attack at 0x101356510>
>>> Garen.name='Garen' #增加属性
>>> del Garen.name #删除属性

2)实例化

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

1 class Garen:        #定义英雄盖伦的类,不同的玩家可以用它实例出自己英雄;
2     camp='Demacia'  #所有玩家的英雄(盖伦)的阵营都是Demacia;
3     def __init__(self,nickname,aggressivity=58,life_value=455): #英雄的初始攻击力58...;
4         self.nickname=nickname  #为自己的盖伦起个别名;
5         self.aggressivity=aggressivity #英雄都有自己的攻击力;
6         self.life_value=life_value #英雄都有自己的生命值;
7     def attack(self,enemy):   #普通攻击技能,enemy是敌人;
8         enemy.life_value-=self.aggressivity #根据自己的攻击力,攻击敌人就减掉敌人的生命值。
View Code

  实例化:类名+括号

1 >>> g1=Garen('草丛伦') #就是在执行Garen.__init__(g1,'草丛伦'),然后执行__init__内的代码g1.nickname=‘草丛伦’等

self的作用是在实例化时自动将对象/实例本身传给__init__的第一个参数,self可以是任意名字,但是瞎几把写别人就看不懂了。

  查看类的属性

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

 

posted @ 2018-04-10 18:32  kuoiea  阅读(198)  评论(0)    收藏  举报