1,面向对象的引入
#人狗大战 def Person(name,blood,aggr,sex): person = { 'name':name, 'blood':blood, #血量 'aggr':aggr, #攻击力 'sex':sex } # 人 攻击技能 打 def attack( dog): dog['blood'] -= person['aggr'] # 狗的血量减去人的攻击力 print('%s被打了,掉了%s的血' % (dog['name'], person['aggr'])) person['attack'] = attack return person #优点 :代码精简了 方便增加人物 方便修改 人物更加规范了。————人模子 def Dog(name,blood,aggr,kind): dog = { 'name':name, 'blood':blood, #血量 'aggr':aggr, #攻击力 'kind':kind } # 狗 咬人 def bite(person): person['blood'] -= dog['aggr'] print('%s被咬了,掉了%s的血' % (person['name'], dog['aggr'])) dog ['bite'] = bite return dog dog = Dog('狗子',1000,100,'teddy') alex = Person('alex',100,1,'None') nezha = Person('哪吒',200,2,'None') print(alex) dog['bite'](alex) print(alex) #Dog 函数 和 Person 函数都是定义了一类事物 #直到调用了函数,复制了之后才真的有了一个是实在的人和狗。 #面向对象编程 #所谓模子 就是 类 抽象的 我能知道有什么属性 有什么技能 但不能知道具体的值 #dog alex nezha 就是对象 有具体的值,属性和技能都是根据类规范的
2,初始面向对象
class 类名: 属性 = 'a' print(类名.属性 ) #类名的作用 就是操作属性 查看属性 class Person: #类名 country = 'China' #创造了一个只要是这个类就一定有的属性 #类属性 静态属性 def __init__(self,*args): #初始化方法,self是对象,是一个而必须传的参数 #print(self.__dict__) #self就是一个可以存储很多属性的大字典 self.name = args[0] #往字典里添加属性的方式发生了一些改变 self.blood = args[1] self.aggr = args [2] self.sex = args [3] def walk(self,n): #方法,一般情况下必须传self参数,且必须写在第一个 #后面还可以传其他参数,是自由的。 print('%s走走走,走了%d步'%(self.name,n)) print(Person.country) print(Person.__dict__) alex = Person('alex',100,1,'None') # alex 对象 实例化 print(alex.__dict__)#查看所有属性 print(alex.name) #查看属性的值 # print(alex.blood) # print(alex.aggr) # print(alex.sex) #Person.walk(alex) #调用方法 类名.方法名(对象名) alex.walk(5) #Person.walk(alex)的简写 # 对象 = 类名() # 过程: # 类名() 首先会创造出一个对象,创建了一个self变量 # 调用了init方法,类名括号里的参数会被这里接收 # 执行init方法 # 返回self #对象能做的事情: # 操作属性 # 调用方法 #__dict__ 对于对象的属性,都可以通过字典的语法来修改属性的值。 #类能做的事情: #实例化 #调用方法 只不过要自己传递self参数 #调用类中的属性,也就是调用静态属性 #__dict__类中的属性,只能看,不能修改。 #不管是 类名 还是 对象 都可以调用 __dict__ 属性 print(Person.__dict__['country']) Person.__dict__['country'] = '印度' print(alex.__dict__['name']) alex.__dict__['name'] = '狗子' print(alex.__dict__['name']) alex.age = 99 print(alex.__dict__)
运行结果:
{'name': 'alex', 'blood': 100, 'aggr': 1, 'sex': 'None'} alex被狗子咬了,掉了100的血 {'name': 'alex', 'blood': 0, 'aggr': 1, 'sex': 'None'} {'name': '狗子', 'blood': 1000, 'aggr': 100, 'kind': 'teddy'} 哪吒被狗子打了,掉了100的血 {'name': '狗子', 'blood': 900, 'aggr': 100, 'kind': 'teddy'}
2.2练习,以面向对象编程的思想实现下面的功能
练习一:在终端输出如下信息
小明,10岁,男,上山去砍柴
小明,10岁,男,开车去东北
小明,10岁,男,最爱大保健
老李,90岁,男,上山去砍柴
老李,90岁,男,开车去东北
老李,90岁,男,最爱大保健
老张...
class Person: def __init__(self,name,age,sex,hobby): self.name = name self.age = age self.sex = sex self.hobby = hobby def climb(self): print('{0},{1}岁,{2},上山去砍柴'.format(self.name,self.age,self.sex)) def love(self): print('{0},{1}岁,{2},最爱{3}'.format(self.name,self.age,self.sex,self.hobby)) def driv(self): print('{0},{1}岁,{2},开车去东北'.format(self.name,self.age,self.sex)) ming = Person('小明',10,'男','大保健') li = Person('老李',90,'男','大保健') zhang = Person ('老张',50,'男','大保健') ming.climb() ming.driv() ming.love() li.climb() li.driv() li.love() zhang.climb() zhang.driv() zhang.love()
运行结果:
小明,10岁,男,上山去砍柴
小明,10岁,男,开车去东北
小明,10岁,男,最爱大保健
老李,90岁,男,上山去砍柴
老李,90岁,男,开车去东北
老李,90岁,男,最爱大保健
老张,50岁,男,上山去砍柴
老张,50岁,男,开车去东北
老张,50岁,男,最爱大保健