22、面向对象

面向对象

1、面向对象

  面向对象的程序设计的核心是对象(上帝式思维),要理解对象为何物:对象就是单独的个体,程序的设计都是在这个个体之内。

  优点:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。

  缺点:可控性差

  类:抽象的,我能知道什么属性,有什么技能,但不知道属性的具体的值

  对象,有具体的值,技能和属性都是根据类的规范

2、类和对象

  类:具有相同特征的一类事物(人、狗、老虎)

  对象:具体的某一个事物(隔壁阿花、楼下旺财)

  实例化:类到对象具体实例的过程

  1)类名 ()  创造出一个对象,并且创造了一个self变量

         调用__init__方法,类名括号里的参数会在这里被接收

    执行__init__方法

    返回self

  2)对象能做的事

    查看属性

    调用方法

    __dict__对于对象的增删改查都可以通过字典的语法进行

  3)类名能做的事

    实例化

    调用方法,要自己传递self参数

    调用类中的属性,也就是调用静态属性

    __dict__调用类中的属性,只能查看,不能修改

 3、具体实例:

class Person:                    #类名
    country= 'China'            #创造了一个只要是这个是这个类就有的属性,
                                #类属性,是静态属性
    def __init__(self,name,blood,aggr,kind):         #初始化方法,self是一个必须传的参数
        self.name=name                                #self是一个可以储存很多属性的大字典
        self.blood=blood
        self.aggr=aggr
        self.kind=kind
    def attack(self,dog):               #方法,一般情况下必须传self参数,且必须写在第一
        dog.blood -= self.aggr        #个,后面可以传很多参数,是自由的
        print(dog.blood)

jin=Dog('金老板',100,20,'male') #类名实例化对象,jin就是实例化
alex=Person('Alex',100,30,'')
print(alex.country)          #类名,可以看类的属性,不需要实例化就可以看属性
print(alex.__dict__)         #查看所有属性
alex.attack(jin)            #相当于Person.attack(alex,jin),调用方法 类名.方法名(对象名)

class Dog:
    def __init__(self,name,blood,aggr,kind):
        self.name=name
        self.blood=blood
        self.aggr=aggr
        self.kind=kind
    def bite(self,person):
        person.blood -= self.aggr
        print(person.blood)

 未完待续……

原文地址:https://www.cnblogs.com/wangyuxing/p/8288461.html