python面向对象程序设计
1:类
类就是一个图纸
类不可以直接使用
类中的行为叫类方法
类中的特性叫类属性
2:对象
对象时根据类创建出来的,可以直接使用
一个类可以创建多个对象
每个对象的属性值可能有所不同
一定先有类再有对象
3:面向对象设计基础
面向对象编程首先要设计类
类的三要素
类名
属性
类中的变量--属性
方法
类中的函数--方法
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | '''设计一个小猫类 类名cat 属性: name:名字 color:颜色 height:身高 weight:体重 方法: eat:吃饭 drink:喝水 sleep:睡''' class cat: def eat( self ): print ( "猫吃饭" ) def drink( self ): print ( "猫喝水" ) |
class关键字
'''class关键字的作用
定义一个类
语法:
class 类名:
def 方法名(self,参数1,参数2……)'''
示例
1 2 3 4 5 | class cat: #使用class关键字定义了一个类 def eat( self ): #方法的参数,第一个参数必须是self print ( "猫吃饭" ) def drink( self ): print ( "猫喝水" ) |
对象
'''对象
类中的方法不能直接调用
把类实例化为对象后,通过对象调用方法
实例
通过类创建的对象叫实例
实例化
通过类创建对象的过程叫示例化
语法
对象名.类名(参数列表)
#对象创建后通过对象名.方法名(参数),调用方法
对象名.方法名()'''
示例
1 2 3 4 5 6 7 8 | c1 = cat() #实例化对象,对象名类似与变量名 c1.eat() #通过对象名.方法名调用类的方法,调用类的方法时不用提供self对应的实参 c1.drink() #方法只能通过对象调用,不能通过类直接调用 #c1就是cat类的实例 #c1=cat()这个动作就叫实例化 c2 = cat() #通过cat类又创建了一个实例叫c2,同样这个类也可以调用cat类中的方法 c2.eat() c2.drink() |
self参数的作用
'''self参数的作用
1:self参数可以在方法内部定义和使用属性
2:self参数可以在方法内部嵌套调用其他方法
3:在类的外部是不可以使用self的
4:在类的外部调用方法
对象名.方法名(参数)
5:在类的外部调用属性
对象名.属性名()'''
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class dog: #创建了一个类 def set_name( self ): #定义了一个类属性(属性可以称为他的特性,如名字颜色,升高体重) self .name = "tom" #给属性赋值,tom def eat( self ): #定义了一个类的方法(类的方法可以称为类的动作,吃饭喝水) print ( "%s吃饭" % self .name) #在类方法里面调用了类的属性/这个方法里面使用了类的name属性 def drink( self ): print ( "%s喝水" % self .name) c1 = dog() #实例化类创建了一个对象叫c1 c1.set_name() #因为在类的方法里面调用了类的属性所以调用对象方法前,需要先调用属性,不然会报错 c1.eat() #调用了类的方法 c1.drink() c1.name = "lisi" #这里给类的属性赋值,相当于函数的实参 c1.eat() #因为在类的方法里面使用了类的属性,所以当类的属性值发生改变时,类方法里面调用的属性值也会随之改变 #案例:创建一个小狗类,创建对象,设置和对象的name为旺财,通过show_name查看类的name class samilldog: #定义了一个小狗类 def set_name( self ,name): #定义了类的属性,属性中有一个形参叫name self .name = name #self.set_name="旺财" def show_name( self ): print ( "小狗的名字叫:%s" % self .name) sd = samilldog() sd.set_name( "旺财" ) #在调用类的属性时实参会将值传给形参 sd.show_name() |
init方法
'''__init__方法
__init__注意名字使用前后各两个下划线包裹起来
__init__方法作用:
当创建对象的时候__init__方法会自动调用'''
示例
1 2 3 4 5 6 7 | class cat: def __init__( self ): print ( "cat类被创建对象了" ) def eat( self ): print ( "eatfish" ) c1 = cat() #在创建对象时自动调用__init__方法 c1.eat() |
init方法的作用
'''__init__方法的作用:
1:定义类中的属性
2:通过init方法的参数为属性赋值
3:init方法一但有了形参,对象在实例化时就必须提供实参,为了避免实例化时必须提供实参,init方法总是要有缺省值'''
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | class cat: def __init__( self ): print ( "cat类被创建对象了" ) def eat( self ): print ( "eatfish" ) c1 = cat() #在创建对象时自动调用__init__方法 c1.eat() '''__init__方法的作用: 1:定义类中的属性 2:通过init方法的参数为属性赋值 3:init方法一但有了形参,对象在实例化时就必须提供实参,为了避免实例化时必须提供实参,init方法总是要有缺省值''' class cat: def __init__( self ,name = "富贵" ): #可以通过init方法给类的属性赋值 self .name = name def show_name( self ): print ( "这个猫的名字叫:%s" % self .name) c2 = cat() #因为在创建对象的时候init方法会被自动调用,所以当init方法的形参没有值时,在创建对象的时候就需要有实参,如果形参有值,那么需要修改类属性的值就赋值实参,不修改就不用 c2.show_name() c3 = cat( "平安" ) #通过cat类又创建了一个c3对象,并赋值类属性的值为平安, c3.show_name() #调用类的方法查看c3的属性值 #定义一个完整的小猫类 class cat: def __init__( self ,name = "富贵" ,color = "yellow" ): #定义了一个类,类有两个属性名字和颜色,均有缺省值 self .name = name self .color = color '''def set_name(self,name,): self.name=name/self.name="tom" self.color=color''' #如果没有使用init方法就需要使用普通方法去调用赋值给属性 def show_name( self ): #定义了类的方法-查看类属性的值 print ( "这个小猫的名字叫:%s" % self .name) def show_color( self ): #定义了一个类查看类的第二个属性值 print ( "这个小猫颜色是:%s" % self .color) def show( self ): #定义了一个方法,通过这个方法可以调用前面两个方法/实现了一个函数的嵌套 self .show_name() self .show_color() c1 = cat() #因为这个类的属性我们给了缺省值,如果没有特殊要求就可以不带实参,且使用了init方法此时这个类中的属性已经被自动调用 #c1.set_name/如果我们没有使用init方法,那么在创建完类或要给类属性赋值的时候就需要先调用以下类属性 c1.show() #实现的函数嵌套,当我们调用这个函数是,被嵌套的函数会自动调用 #案例car类 '''# 汽车car 要区分属性和方法,在init方法中为每个属性定义默认值 # 属性 # luntai(轮胎) # yanse(颜色) # chuanghu(窗户) # xinghao(型号) # 方法 # guadang(挂挡) # qianjin(前进) # houtui(后退) # wurenjiashi(无人驾驶) # shache(刹车) # jiayou(加油)''' class car: def __init__( self ,luntai = "米其林" ,yanse = "black" ,chuanghu = "黑色窗户" ,xinghao = "大众" ): self .xinghao = xinghao self .yanse = yanse self .luntai = luntai self .chuanghu = chuanghu def guadang( self ,a): if a = = "前进" : self .qianjing() elif a = = "后退" : self .houtui() else : self .wurenjiashi() def qianjing( self ): print ( "%s牌子汽车挂挡起步了" % self .xinghao) def houtui( self ): print ( "%s牌子汽车在倒车" % self .xinghao) def wurenjiashi( self ): print ( "%s的%s在无人驾驶" % ( self .yanse, self .xinghao)) #如果在格式化字符串的时候遇到需要凭借两个字符或两个以上不同类型字符记得有括号 c1 = car() c1.guadang( "wurenjiashi" ) |
del方法
'''del方法
del方法在对象在内存中销毁的时候(类运行结束的时候)自动调用
del方法只有一个参数就是self'''
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class cat: def __init__( self ,name = "tom" ): self .name = name def show_name( self ): print ( "这个猫的名字叫:%s" % self .name) def __del__( self ): print ( "对象运行结束时自动调用del方法" ) c1 = cat() #对象运行前创建对象时自动调用init方法,此时类方法就有了值为tom c1.show_name() #调用对象的方法查看对象的值 #在对象运行完自动调用del方法,如果对象是局部的,那么函数运行完毕自动调用del方法,如果对象是全局的那么在程序执行完毕自动调用方法 '''举例:犹如在自动化测试过程中:使用init方法的地方一般为实例化浏览器驱动,打开测试网址 使用del方法一般是在运行完自动化代码,完毕浏览器的操作''' #设计方法的惯例 class cat: def __init__( self ,name = "tom" ): self .name = name def get_name( self ): #show_name也可以使用return返回值将结果返回给调用者,在类中函数所有操作都是可以用的 return self .name c1 = cat() e = c1.get_name() #将函数的返回值返回给调用者 print (e) |
str方法
'''str方法
写法与del,init一致都是使用两个下划线包裹
str只有一个参数就是self
使用str方法必须要有return返回值,且return返回的必须是一个字符串
str方法的作用
当把一个带有str方法的对象放到print里面,
print函数会显示str方法return返回的字符串
如果类没有str方法,那么实例化的对象放到print里面就显示对象的内存地址'''
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | class cat: def __init__( self ,name = "tom" ): self .name = name c = cat() print (c) #类中没有str方法,如果直接放到print里面那么就显示对象的内存地址 class dog: def __init__( self ,name = "tom" ): self .name = name def __str__( self ): return self .name d = dog() print (d) #在类中加了str方法,且str方法必须要有返回值return必须返回一个字符串,所以现在将对象直接放到print里面,那么print打印的就是我们想要的内容 #练习计算机 '''实现一个计算器的类: 通过init方法给类属性赋值 通过调用类方法给函数赋值''' class calc: def __init__( self , open = "+" ): #这个类有一个属性open缺省值是+ self . open = open def calc( self ,a,b): #类方法有两个形参a和b if self . open = = "+" : return a + b elif self . open = = "-" : return a - b elif self . open = = "*" : return a * b elif self . open = = "/" : c = "除数不能为0" if b! = 0 : return a / b else : return c else : return None c = calc() print (c.calc( 2 , 6 )) c1 = calc( "*" ) print (c1.calc( 2 , 5 )) c3 = calc( "/" ) print (c3.calc( 8 , 0 )) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本