23.初识面向对象

面向对象的优点:

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

2.面向对象可以使程序的维护和拓展都变得简单,并且可以大大提高程序开发效率。另外,基于面向对象的代码共更容易理解逻辑,使团队开发变得更从容。

初识面向对象:

在python中所有的数据类型都是类,几乎所有的东西都是对象。

如:dict 就是一个类,d={'a':1} 就是一个对象;list 就是一个类, l=['a','d','f'] 就是一个对象。

自定义类

格式1:

class 类名:
  属性

查看定义的属性  print(类名.属性)

类名的作用就是操作属性,查看属性,通常类名的首字母大写

class Hello:
    name='amao'
print(Hello.name)

格式2:

但是还有一种情况声明对象需要往类中传入参数:

如:alex=Person("sdfdf",100,1,'man'),在定义类时就需要使用__init__()方法

__init__()方法称为初始化方法,必须传入一个对象,即self参数,在声明对象时,会自动执行,传入参数

代码如下:

class Person:
    country='China'    #类拥有的属性,每个对象都会具有的属性,称为类属性,又称静态属性

    def __init__(self,*args):   #self实际上是一个空字典,往字典里添加属性的方式发生改变
        self.name=args[0]
        self.hp = args[1]
        self.aggr = args[2]
        self.sex = args[3]
    def walk(slelf,n):   #方法必须添加参数,默认写为self,后面可另写为其他
        print("%s走走走,走了%s步"%(self.name,n))
alex=Person("sdfdf",100,1,'man')  #声明对象
print(alex.name)   #查看对象alex的名字
Person.walk(alex,5)    #调用walk方法:类名.方法名(对象名)
alex.walk(5)    #这种方法域上面的作用相同,对象可以直接调用器方法,把自己作为参数传给walk

属性分为动态属性和静态属性:

动态属性:属于对象的类叫动态属性,如上name,hp等

静态属性:在类中定义的属性叫静态属性,如上country

创建对象:

类名+()  就会声明一个对象

过程: 首先会创造出一个对象
  调用init方法,类名括号里的参数会被这里接收
  执行init干法
  返回self

对象能做的事:

1.查看属性 alex.__dict__ 查看所有属性
2,调用方法 alex.walk(5)
3.类和对象都可以调用方法__dict__,对于对象的增删查改都可以通过字典语法进行
print(Person.__dict__)

执行结果:{'__module__': '__main__', 'country': 'China', '__init__': <function Person.__init__ at 0x000001A95CBCB158>, 'walk': <function Person.walk at 0x000001A95CC2F9D8>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
print(alex.__dict__)

执行结果:{'name': 'sdfdf', 'hp': 100, 'aggr': 1, 'sex': 'man'}
可以通过Person.__dict__['country'] 来查看静态属性country的值
可以通过alex.__dict__['name']='hello' 对对象属性的值进行修改
alex.name='hello' 与上一行作用相同

类名能做的事:

1,实例化
2,调用方法 要自己传递参数 Person.walk(alex,5)
3,调用类中的属性 类名可以查看静态属性, Person.country

使用面向对象编程的情况:

1.非常明显的处理一类事物,这些食物都具有相似的属性和功能
2.当有几个函数,需要反反复复传入相同参数的时候,就可以考虑面向对象

面向对象小游戏:

class Person:
    def __init__(self,name,hp,aggr,sex):
        self.name=name
        self.hp = hp
        self.aggr = aggr
        self.sex = sex

    def da(self,dog):
        dog.hp-=self.aggr
        if(dog.hp==0):
            print('%s死了'%dog.name)
            exit()
        self.hp+=10

class Dog:
    def __init__(self,name,hp,aggr,kind):
        self.name=name
        self.hp=hp
        self.aggr=aggr
        self.kind=kind
    def bite(self,people):
        people.hp-=self.aggr
        if (people.hp==0):
            print('%s死了'%people.name)
            exit()
        self.hp+=10
alex=Person("sdfdf",100,20,'man')
jin=Dog('hello',1000,50,'taidi')
print(alex.__dict__)
print(jin.__dict__)
jin.bite(alex) 
alex.da(jin)  

 

posted @ 2020-10-21 22:20  maday  阅读(75)  评论(0)    收藏  举报