day14- 面向对象基础(一)

今天开始写关于面向对象的内容,面向对象是编程思想中一大思想,因为平常使用中常常会用到,本次主要是对于我我的认为重点的基础知识进行整理,不会特别详细的书写。编程

1.面向过程与面向对象的区别函数

2.类spa

3.类的属性以及操做方式3d

4.对象指针

5.对象的属性以及操做方法code

6.类的名称空间以及对象空间对象

 

开始今日份整理blog

 

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()

TIM图片20190118164845

类中的方法的第一个参数约定俗成写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)
# 对象空间中存在一个类对象指针,因此对象能够找到类中的变量以及方法
# 类名只能找到类中的变量,方法,或者(父类中的),不能找对象中的属性。

TIM图片20190118164902

TIM图片20190118164927

类中的函数属性:是绑定对象,绑定不一样的对象是不一样的绑定方法,对象调用绑定方法时,会把对象自己当作第一个参数传给   self,类中的函数是给对象来使用,谁来谁使用。若是类访问本身的属性时,会先从本身的名称空间访问,没有则会去本身的父类去查找,若是没有则不会从全局变量中查找,只会在类的空间中查找。