面向对象程序设计
一、面向过程与面向对象
面向过程:
优点:降低程序复杂度
缺点:牵一发而动全身,不易扩展
应用场景:很少改变的场景,比如linux kernel,git
面向对象:
优点:易扩展
缺点:可控性差
应用场景:互联网,游戏,企业内部软件
二、类和对象
描述:对象是特征(变量)与技能(函数)的结合,类是一系列对象共有的特征与技能
类的作用:
1.属性引用(类名.属性 可以增加或者删除属性)
2.实例化对象
类的定义
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class Chinese: country = 'China' def __init__(self,name,age): self.name=name #p1.name='egon' self.age=age #p1.age=18 def talk(self): print('say chinese',self)
实例化对象
p1=Chinese('egon',18) #__init__(p1,'egon',18)
属性引用(增删改查)
print(Chinese.country) #类的数据属性
print(Chinese.__init__) #类的函数属性
查看类的属性字典,或者说名称空间
print(Chinese.__dict__)
对象
p1=Chinese('egon',18) #__init__(p1,'egon',18)
对象的属性
点(.)的作用:从点左边的名称空间中找点右边的名字--有新名称空间产生
print(p1.name)
print(p1.age)
print(p1.__dict__)
print(p1.__dict__['name'])
类型与类是统一的
print(type(p1))
p1=Chinese('egon',18) #__init__(p1,'egon',18)
p2=Chinese('alex',1000) #__init__(p1,'egon',18)
print(id(p1.country))
print(id(p2.country))
print(id(Chinese.country))
绑定方法:绑定到谁身上,就是给谁用的,谁来调用就会自动把自己当做第一个参数传入
总结
定义在类内部的变量,是所有对象共有的,id全一样
定义在类内部的函数,是绑定到所有对象的,是给对象来用,obj.func() 会把obj本身当做第一个参数出入
对象:方法 -- 自动传值
类:函数
名字查找顺序
print(p1.x) #先从p1.__dict__,找不到再找Chinese.__dict__,找不到就会报错
类和对象的交互
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class Garen: camp='Demacia' def __init__(self,nickname,life_value=200,aggressivity=100): self.nickname=nickname self.life_value=life_value self.aggressivity=aggressivity def attack(self,enemy): enemy.life_value-=self.aggressivity class Riven: camp = 'Noxus' def __init__(self, nickname, life_value=100, aggressivity=200): self.nickname = nickname self.life_value = life_value self.aggressivity = aggressivity def attack(self, enemy): enemy.life_value -= self.aggressivity g=Garen('欧德博爱') r=Riven('矮里渴死') print(r.life_value) g.attack(r) #发送了一条消息,称为向g发送了attack指令 print(r.life_value)
类的继承
类的组合
类的多态
类的封装
接口
反射