python学习笔记,初始面向对象。
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__)
运行结果:
1 2 3 4 5 6 | { '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岁,男,最爱大保健
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术