#函数的重写 #在继承的前提下,如果在子类中重新实现了父类的函数 #如果在一个类中有很多子类,大多数子类可以直接使用父类中实现的功能 #但是如果父类中实现的需求满足不了部分子类的使用,则需要在子类中重写函数 #重写的注意事项 #保留函数的声明部分:def xxx(self,形参列表) #重新实现函数的实现部分[循环体] #例子 # class Animal(): # def style(self): # print("walk") # class dog(Animal): # pass # class bird(Animal): # def style(self):#子类中重写的函数必须要和父类函数重名 # print("fly") # # class fish(Animal): # def style(self): # # super(fish,self).style()#继承方式一 # super().style()#继承方式二 # # Animal.style(self)#继承方式三 # print("swimming") # # #如果子类未重写父类的函数,则子类可以继承父类中的函数 # #如果子类重写了父类中的函数,子类对象将默认调用子类重写之后的函数 # #子类重写后,如果仍要用父类中的函数的功能,则可以在子类函数中调用父类函数 # d=dog() # d.style() # print("") # e=bird() # e.style() # print("") # x=fish() # x.style() class Student(): def __init__(self,name,age): self.name=name self.age=age def __str__(self):#__str__系统函数,该函数的返回值就是在内存中的地址 return f"{self.name}"#对__str__的重写,将它在类中的返回值改为f"{self.name}" # def __repr__ (self): # return f"{self.name}" #一般__str__和__repr__一起使用 #先设定__str__的返回值 #然后给__repr__赋值__str__即可 __repr__ =__str__ sss=Student("张三",20) print(sss) #注意:将对象添加到列表中,直接打印容器,默认仍然显示地址,所以此时要重写__repr__ # q=[sss] # print(q) #装饰器不但能装饰函数还能装饰类 #装饰器装饰函数 # def check1(func):#在这里func表示被装饰的函数 # def check2(): # func() # print("装饰器-111111111111111") # return check2 # @check1 # def check3(): # print("被装饰的函数-222222222") # check3() # print("*"*50) # #函数装饰类 # def ppp1(cls):#参数命名:cls表示被装饰的类 # def ppp2(): # cls("李四",20)#创建对象 # a=cls("李四",20) # print(a.name) # return "&&"*20 # return ppp2 # @ppp1#调用外部函数ppp1 # class Class(): # def __init__(self,name,age): # self.name=name # self.age = age # print("类-ccccccc(被装饰)") # aaaa=Class()#创建对象,并且调用函数 # print(aaaa) #如果两个变量中存储的数据的地址相同,则说明两个变量存储的是同一个对象 #方法1:p1 is p2 #方法二:id(p1)==id(p2) # # class Person(): # def __init__(self,name,age): # self.name=name # self.age = age # p1 = Person("人类1",10) # p2 = Person("人类2",14) # print(p1 is p2)#第一种方法 # print(id(p1)==id(p1))#第二种方法 # print("*"*100) # #单例类 # #需求:书写一个装饰器,使得任意一个类都成为装饰器 # def ppp1(cls): # instance = None#instance,instance(只是一个变量名)装饰被修饰的类可以创建的唯一的对象 # #None有空的意思,代表改制为一个空对象,或者代表不存在 # # 这里的instance = None,在第二次进入时不会被重新赋值 # #在python中,当装饰器被应用到类上并且一直被引用时,外层函数中定义的变量在 # #内存中是存在的,并且不会被重新赋值 # #当多次使用装饰器修饰同一个类或方法时,使用的是同一个装饰器函数。并不会重新创建或赋值变量 # #因此,这个变量在内存中只会存在一份,并且被所有引用到的地方所共享和使用 # def ppp2(*args,**kward):#先在这里打包 # nonlocal instance # if instance == None: # instance=cls(*args,**kward)#在这里拆包 # return instance # return ppp2 # #在第一次进入时,instance的值被改变为cls(*args,**kward), # #由于instance,不被改变所以第二次运行时返回的还是的一次(被改变后的)instance # # # 要实现单例类则只要控制,该代码只执行一次 # @ppp1#调用外部函数ppp1 # class Class(): # def __init__(self,name,age): # self.name=name # self.age = age # p1=Class("张三",100) # p2=Class("李四",18) # print(p1.name,p1.age) # print(p2.name,p2.age) # # 出现错误:抛出异常 # 处理错误:捕获异常 # print('start~~~~') # try: # # 可能存在异常的代码 # num = int(input("请输入一个数字:")) # list1 = [34, 45, 2, 43, 6, 89] # print(f"获取到的元素为:{list1[num]}") # except Exception as e:#如果不知道要发生什么类型的错误就将Exception添加上,Exception是各种错误的父类 # # # e:异常的描述信息 # print("错误",e) # finally: # # 任何情况下都会执行,一般 用来进行文件的关闭或者数据库的关闭 # print('finally~~~') # # print('end~~~~~~')
作业,,,,,,,,,,,,啊啊啊啊啊
最新推荐文章于 2024-10-13 23:49:20 发布
本文讲解了Python中函数的重写、类的继承机制以及如何在子类中重写父类函数。同时介绍了装饰器的使用,包括装饰函数和装饰类,以及单例类的实现。最后提到了异常处理的基本概念和try-except-finally语句的应用。
摘要由CSDN通过智能技术生成