day14- 面向对象基础(一)
今天开始写关于面向对象的内容,面向对象是编程思想中一大思想,由于日常使用中经常会用到,本次主要是对于我个人认为重点的基础知识进行整理,不会特别详细的书写。
1.面向过程与面向对象的区别
2.类
3.类的属性以及操作方式
4.对象
5.对象的属性以及操作方法
6.类的名称空间以及对象空间
开始今日份整理
1.面向过程与面向对象的区别
1.1面向过程:核心是过程二字,过程指的是解决问题的步骤,设定一条流水线,机械式的思考问题
- 优点:复杂的问题流程化,进而简单化
- 缺点:可扩展性差
- 应用换将:应用内容变化较少,流程化作业较多,例如数据分析等
1.2面向对象:核心是对象二字,对象的特征就是特征与技能的结合体
- 优点:可扩展性强,
- 缺点:编程复杂度高
- 应用环境:用户需求经常变动,互联网应用,游戏,企业内部应用
2.类
2.1类的定义:一系列对象相似的技能和技能的结合体;强调:站在不同的角度,得到的分类是不一致的;对象是类的具体表现
现实中类与对象
猫,是一类,你家的大橘是一个具体的对象
狗,是一类,你家的大黄是一个具体的对象
男神,是一类,你最喜欢的老公是一个具体的对象
在现实中,先有对象,才会找到共同的特征,归为一类
在编程中,先有类,才会根据类创建对象,刚好相反
2.2类的结构
##########
class 类名()#类名要首字母大写
变量
函数(方法)
##########
3.类的属性以及操作方式
类的属性主要分俩种
- 静态属性:类内部定义的变量称之为数据属性
- 动态属性:类内部定义的函数称之为函数属性
静态属性的查询
# 第一种,类名.__dict__方式:查看类中所有内容时用。 # 查: print(Human.__dict__) print(Human.__dict__['mind']) Human.__dict__['mind'] = '无脑' print(Human.__dict__) # 第二种 万能的. 可以增删改查类中的静态属性。 print(Human.mind) # 查 Human.mind = '无脑' # 改 print(Human.mind) del Human.mind # 删 Human.walk = '直立行走' print(Human.walk)
类内方法的调用
# 类名操作类中的方法(除去特殊方法:静态方法,类方法之外,一般不会通过类名执行类中的方法)。 # 类名.方法名(参数) Human.work(111) Human.tools(111) #下面可以做,但不用。 Human.__dict__['work'](111)
4.对象
4.1对象的定义:对象是特征与技能的结合体,只要类名加()就可以生成一个对象
4.2实例化一个对象的过程
- 执行类中自己的__new__方法,产生一个空的对象空间
- 自动执行类中的__init__方法并且将这个空的对象空间传给self
- 在__init__中通过self给这个空间添加属性
5.对象的属性以及操作方法
对象操作对象空间中的属性
obj = Human('小胖','男',20,'女') #1,obj.__dict__ 查询对象中所有的属性 print(obj.__dict__) #2, 通过万能的.的方式操作对象中的单个属性。 obj.job = 'IT' # 增 del obj.n # 删 obj.s = '女' # 改 print(obj.s) print(obj.__dict__) # 3,对象可以查询类中的属性。 print(obj.mind) print(obj.language) obj.a = 666 print(obj.a) # 4,对象可以执行类中的方法。 # 对象执行类中的所有方法(除去3个特殊方法)Python解释器都会将对象空间主动传给方法的第一个参数self、 print(obj) obj.work()
类中的方法的第一个参数约定俗成写self,便于统一,生成多个对象只需要多次调用类名加()加属性就可以生成
6.类的名称空间以及对象空间
class Gamerole(object): name = 'LOL' year = 2012 def __init__(self,name,ad,hp): self.name = name self.ad = ad self.hp = hp def attack(self,p1): # Gamerole.area = '德玛西亚' p1.hp -= self.ad print('%s攻击%s,%s掉了%s血,还剩%s血' %(self.name,p1.name,p1.name,self.ad,p1.hp)) # gailun = Gamerole('草丛伦',10,200) # gailun.armor = 90 # print(gailun.__dict__) # 对象的属性:不仅在__init__里面添加,还可以在其他方法或者类外面添加。 # yasuo = Gamerole('托儿所',20,50) # yasuo.attack(gailun) # 类的属性:不仅在类内部可以添加,还可以在类外部添加。 # Gamerole.year = 6 # print(Gamerole.__dict__) gailun = Gamerole('草丛伦',10,200) timo = Gamerole('提莫',30,60) print(gailun.name) print(gailun.year) # 对象空间中存在一个类对象指针,所以对象可以找到类中的变量以及方法 # 类名只能找到类中的变量,方法,或者(父类中的),不能找对象中的属性。
类中的函数属性:是绑定对象,绑定不同的对象是不同的绑定方法,对象调用绑定方法时,会把对象本身当做第一个参数传给 self,类中的函数是给对象来使用,谁来谁使用。如果类访问自己的属性时,会先从自己的名称空间访问,没有则会去自己的父类去查找,如果没有则不会从全局变量中查找,只会在类的空间中查找。