day19
面向对象
1.面向过程
核心就是过程二字,过程指的是做事情的步骤,先做什么,再做什么。
基于该思想的编程,就好比一条流水线,一种机械式的思维方式
优点:逻辑结构清晰,将复杂的问题简单化,流程化
缺点:可扩展性差
2.面向对象
核心就是对象二字,对象是特征与技能的结合体,基于该思想的编程,
就好比创造世界,是一种上帝的思维方式
优点:可扩展性高
缺点:编写程序的复杂程度要远远高于面向过程的编程
3.类和对象
- 类:类是一系列对象相似的特征和技能的结合体
- 对象:对象是特征和技能的结合体
- 在程序中,必须先有类,然后再有对象
- 定义类:
- 类在定义时,会产生一个名称空间
- 将类内的所有名字全部丢到该名称空间中
- 类在定义阶段已经生成了名称空间,类在定义阶段就会执行
class Student:
school='oldboy'
def choose_course(self):
print ('choose course ......')
def learning(self):
print ('learning is ........')
-
注意事项
- 类中可以有任意python代码,在定义阶段就会被执行
- 会产生新的名称空间,用来存放变量名和函数名,可以通过Student.__dict__查看
-
绑定方法的特点:
-
类调用阶段:
- 1.类在调用阶段会产生一个空对象,生成一个空对象的名称空间
- 2.会自动触发init函数
- 3.会把对象本身以及括号内的参数一起传给init函数
-
总结:调用类会产生一个对象,调用类的过程叫做实例化,产生的对象称为类的一个实例
-
类内部的函数
- 由类来调用类内部的函数,该函数只是一个普通函数,普通函数需要接收几个参数就得传入几个参数
-
由对象调用类内部的函数称之为对象的绑定方法,不同对象调用该绑定方法,则会将不同的对象传入该绑定方法
- 特殊之处就是把对象当作第一个参数传入该方法中
1.什么是对象?什么是类?
- 对象是特征和技能的结合体
- 类是一些对象相似的特征与功能的结合体
2.绑定方法的有什么特点
- 类内部的函数主要是给对象调用的,由对象调用类内部的函数称之为绑定方法不同对象调用该绑定方法,则会将不同的对象传入该绑定方法,特殊之处就是把对象当作第一个参数传入该方法中
作业3
class Riven:
camp='Noxus'
def __init__(self,nikcname,aggr=54,life_value=414,money=1001,armor=3):
self.nickname=nikcname
self.aggr=aggr
self.life_value=life_value
self.money=money
self.armor=armor
def attack(self,enemy):
damage_value=self.aggr-enemy.armor
enemy.life_value-=damage_value
class Garen:
camp='Demacia'
def __init__(self,nickname,aggr=58,life_value=455,money=100,armor=10):
self.nickname=nickname
self.aggr=aggr
self.life_value=life_value
self.money=money
self.armor=armor
def attack(self,enemy):
damage_value=self.aggr-enemy.armor
enemy.life_value-=damage_value
class BlackCleaver:
def __init__(self,price=475,aggr=9,life_value=100):
self.price=price
self.aggr=aggr
self.life_value=life_value
def update(self,obj):
obj.money-=self.price
obj.aggr+=self.aggr
obj.life_value+=self.life_value
def fire(self,obj):
obj.life_value-=1000
r1=Riven('草丛伦')
g1=Garen('盖文')
b1=BlackCleaver()
print (r1.aggr,r1.life_value,r1.money)
print (g1.life_value)
r1.attack(g1)
print (g1.life_value)
r1.b1.fire(g1)
print (g1.life_value)