Day16:面向对象

一、面向过程和面向对象

  - 面向过程就好比精心设计一条流水线,一条解决某一问题的流水线,

    需要周全考虑什么时候处理什么事情。

    - 优点:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可。

    - 缺点:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身。

  - 面向对象就是把自己当做上帝,一切可看见的东西皆对象,对象就是拥有

    某些属性和某些方法的东西。

    - 优点:解决了程序的扩展性,对某一对象的修改,会立刻反映到整个体系中。

    - 缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的

            处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题。

二、初识类和对象

  - 类就是具有相同属性和方法的一类事物。基本数据类型中的类型,

       其本质就是类,也就是说在我们过去的学习中就一直在和类打交道了。
         - 类的定义: class关键字  类名的首字母大写

      - 对象的属性
         - 一开始的时候通过init方法初始化来
         - 在类内调用对象的属性:self.属性名
         - 在类外调用对象的属性:对象名.属性名
       - 调用方法的时候:
         - 对象.方法名
         - 不必传的参数:self

class Rectangle:           #类名
    def __init__(self,length,width):    #静态属性
        self.length = length
        self.width = width
    def perimeter(self):                #动态属性/方法
        return 2 * (self.length + self.width)
    def area(self):
        return self.length * self.width

 

 

三、类命名空间与对象、实例的命名空间。
  - 创建一个类就会创建一个类的名称空间,
       用来存储类中定义的所有名字,这些名字称为类的属性。
       - 类有两种属性:静态属性和动态属性
          - 静态属性就是直接在类中定义的变量
          - 动态属性就是定义在类中的方法
       - 其中类的数据属性是共享给所有对象的
       - 而类的动态属性是绑定到所有对象的
       - 创建一个对象(实例)就会创建一个对象(实例)的名称空间,
          存放对象(实例)的名字,称为对象(实例)的属性
四、面向对象的组合用法。
  - 组合就是在一个类中以另外一个类的对象作为数据属性。

class Person:
    def __init__(self,name,atk,blood):
        self.name = name
        self.atk = atk
        self.blood = blood
    def attack(self,dog):
        print('%s attacks %s' %(self.name,dog.name))
        dog.blood -= self.atk
        print('%s residual HP:%d'%(dog.name,dog.blood))
    def equip(self,weapon):             #利用另外一个类的对象作为数据属性
        print('%s equips %s'%(self.name,weapon.name))
        self.atk = self.atk + weapon.atk
        self.blood = self.blood + weapon.blood

class Dog:
    def __init__(self, name, atk, blood):
        self.name = name
        self.atk = atk
        self.blood = blood
    def bite(self, person):
        print('%s bites %s' %(self.name, person.name))
        person.blood = person.blood - self.atk
        print('%s residual HP: %d'%(person.name,person.blood))

class Weapon:
    def __init__(self,name,atk,blood):
        self.name = name
        self.atk = atk
        self.blood = blood
    def hurt(self,dog):
        print('%s attacks %s' %(self.name,dog.name))
        dog.blood -= self.atk
        print('%s residual HP:%d' % (dog.name, dog.blood))

person = Person('勇士',400,5000)
dog = Dog('Huskie',300,20000)
weapon = Weapon('打狗棒',1000,8000)

person.equip(weapon)
person.attack(dog)

 



posted @ 2017-09-15 15:16  世界辣么大  阅读(52)  评论(0)    收藏  举报