面向对象
简单的来说就是万物皆对象。
优点是:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。
缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法预测最终结果。于是我们经常看到一个游戏人某一参数的修改极有可能导致阴霸的技能出现,一刀砍死3个人,这个游戏就失去平衡。
类是抽象的,不知道具体的值(人,狗,猫)
对象是具体的值,类规范其他(隔壁老王,泰迪,加菲)
实例化:类——>对象的过程
#自定义类 class 类名(): #类名的作用 就是操作属性,查看属性 属性 = 'a' print(类名.属性) #下面看看具体例子 class Person: #类名 Country = 'China' #创造了一个只要是这个类就一定有的属性 类属性 静态属性 def __init__(self,*args): #初始化方法,self是对象, self.name = args[0] self.hp = args[1] self. pha= args[2] self.sex = args[3] def walk(self,n): #方法,一般情况下必须传self参数,且必须写在第一个,后面可传其他参数 print('%s走走走,走了%s步' % (self.name,n)) sole= Person('二狗子',101,1,'男') #类名可以实例化对象 print(Person.Country) #类名可以查看类中的属性,不需要实例化就可以查看 print(sole.name) print(sole.hp) print(sole.pha) print(sole.sex) print(sole.__dict__) sole.walk(5) #调用方法 类名.方法名(对象名) sole.name = '老王' print(sole.name)
''' 输出下列信息 小明,10岁,男,上山去砍柴 小明,10岁,男,开车去东北 小明,10岁,男,最爱大保健 老李,90岁,男,上山去砍柴 老李,90岁,男,开车去东北 老李,90岁,男,最爱大保健 ''' class Person(): def __init__(self,*args): self.name = args[0] self.age = args[1] self.sex = args[2] def shangshan(self): print('%s,%s岁,%s,上山去砍柴'%(self.name,self.age,self.sex)) def drive(self): print('%s,%s岁,%s,开车去东北'%(self.name,self.age,self.sex)) def favor(self): print('%s,%s岁,%s,最爱大保健'%(self.name,self.age,self.sex)) ming = Person('小明',10,'男') ming.shangshan() ming.drive() ming.favor() zhang = Person('老张',90,'男') zhang.shangshan() zhang.drive() zhang.favor()
#面向对象定义及调用的固定模式 class 类名: def __init__(self,参数1,参数2): #__init__与self是固定模式 self.对象的属性1 = 参数1 self.对象的属性2 = 参数2 def 方法名(self):pass def 方法名2(self):pass 对象名 = 类名(1,2) #对象就是实例,代表一个具体的东西 #类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法 #括号里传参数,参数不需要传self,其他与init中的形参一一对应 #结果返回一个对象 对象名.对象的属性1 #查看对象的属性,直接用 对象名.属性名 即可 对象名.方法名() #调用类中的方法,直接用 对象名.方法名() 即可
面向对象的交互
非常明显的处理一类事物,这些事物都具有相似的属性和功能。
当有几个函数需要反反复复传入相同的参数的时候,就可以考虑面向对象。
这些参数都是对象的属性。
''' 计算圆的周长和面积 ''' from math import pi #调用数学模块 π class Circle: def __init__(self,r): self.r = r def area(self): return '这个圆的周长是:%s'%(pi*self.r**2) def round(self): return '这个圆的面积是:%s'%(2*pi*self.r) c1 = Circle(5) print(c1.area()) print(c1.round())