面向对象(方法、继承、重写)
2022/9/2 23:23:32
本文主要是介绍面向对象(方法、继承、重写),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
本文主要介绍方法(实例方法、类方法、静态方法)、继承(单继承和多继承)以及重写等内容。
一、方法
1、实例方法
用户自定义的方法。
class Student: #类属性 stu_number=True stu_name="张三" stu_age=True def __init__(self): #实例属性 self.stu_sex=True self.stu_name=True def study(self): print("好好学习,天天向上") def eat(self): print("学习饿了,要吃饭") my_student = Student() #方法调用 #1、对象名.方法名 my_student.study() #2、类名.方法名 #因为有个参数self,而self代表对象,因此传入一个对象my_student Student.study(my_student)
2、类方法
类方法需要使用@classmethod去声明,它是一个装饰器,同时在方法中的参数为cls
@classmethod def sleep(cls): print("每个人都需要睡觉")
class Student: #类属性 stu_number=True stu_name="张三" stu_age=True def __init__(self): #实例属性 self.stu_sex=True self.stu_name=True def study(self): print("好好学习,天天向上") def eat(self): print("学习饿了,要吃饭") @classmethod def sleep(cls): print("每个人都需要睡觉") my_student = Student() #方法调用 #1、对象名.方法名 my_student.study() #2、类名.方法名 #因为有个参数self,而self代表对象,因此传入一个对象my_student Student.study(my_student) #通过对象名.方法名 my_student.sleep() #通过类名.方法名 Student.sleep()
通过上面的调用,对比实例方法和类方法,在调用的时候有一点点的区别,在使用类名.方法名调用的时候,类方法可以不用传递参数,而实例方法需要传递参数。
3、静态方法
与类方法一样,静态方法在定义时也需要声明:@staticmethod,与类方法和实例方法不同的是,静态方法没有self或者cls
class Student: #类属性 stu_number=True stu_name="张三" stu_age=True def __init__(self): #实例属性 self.stu_sex=True self.stu_name=True def study(self): print("好好学习,天天向上") def eat(self): print("学习饿了,要吃饭") #类方法 @classmethod def sleep(cls): print("每个人都需要睡觉") #静态方法 @staticmethod def stop(): print("123") my_student = Student() #方法调用 #1、对象名.方法名 my_student.study() #2、类名.方法名 #因为有个参数self,而self代表对象,因此传入一个对象my_student Student.study(my_student) #通过对象名.方法名 my_student.sleep() #通过类名.方法名 Student.sleep() #通过对象名.方法名 my_student.stop() #通过类名.方法名 Student.stop()
二、继承
一个类可以通过继承另一个类的非私有的成员属性和方法。例如B继承A,那么A就叫父类或者基类,B就叫子类。在python中,一个子类可以继承多个父类。
class MianBaoCar: def __init__(self): self.color = "white" self.wheel = 4 def drive(self): print("我是普通面包车,我可以开100km/h") class FlsyCar(MianBaoCar): def __init__(self): print("我是跑车:2222") def my_color(self): print("我是蓝色")
从上面的红框中,可以看出继承了MianBaoCar中的属性wheel和color以及方法drive
多继承
class Car: def __init__(self): self.color = "white" self.wheel = 4 print("我是普通车型:1111") def drive(self): print("我是普通车,我可以开120km/h") class MianBaoCar: def __init__(self): self.color = "black" self.wheel = 5 self.fangxiangpan=1 print("我是面包车,2222") def drive(self): print("我是普通面包车,我可以开100km/h") class FlsyCar(Car,MianBaoCar): # def __init__(self): # # super().__init__() # print("我是跑车:3333") def my_color(self): print("我是蓝色") def drive(self): super().drive() print("我是跑车,我要开180km/h") # 对象初始化 my_flsycar =FlsyCar() # my_flsycar.drive() # my_flsycar.drive() print(my_flsycar.fangxiangpan)
FlsyCar继承了(Car和MianBaoCar),但输出my_flsycar.fangxiangpan这里报错了,原因是多继承时,继承的构造函数是第一个父类Car而不是MianBaoCar。而第一个父类Car中并没有fangxiangpan这个属性。
三、重写
在子类中重新实现父类的方法就叫做重写。
class MianBaoCar: def __init__(self): self.color = "white" self.wheel = 4 def drive(self): print("我是普通面包车,我可以开100km/h") class FlsyCar(MianBaoCar): def __init__(self): # super().__init__() print("我是跑车:2222") def my_color(self): print("我是蓝色") def drive(self): print("我是跑车,我要开180km/h") # 对象初始化 my_flsycar =FlsyCar() # my_flsycar.drive() my_flsycar.drive()
子类中继承父类的drive()方法,打印的结果是:我是普通面包车,我可以开100km/h。子类中重写了父类的drive()方法后,打印的结果是:我是跑车,我要开180km/h。
那么,如果子类需要保留父类中drive()方法,使得打印结果是:我是普通面包车,我可以开100km/h。我是跑车,我要开180km/h。应该怎么做呢?
super():代表父类
class MianBaoCar: def __init__(self): self.color = "white" self.wheel = 4 def drive(self): print("我是普通面包车,我可以开100km/h") class FlsyCar(MianBaoCar): def __init__(self): # super().__init__() print("我是跑车:2222") def my_color(self): print("我是蓝色") def drive(self): super().drive() print("我是跑车,我要开180km/h") # my_flsycar =FlsyCar() my_flsycar.drive()
这篇关于面向对象(方法、继承、重写)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行
- 2024-05-08阿里云域名注册流程,分享给第一次购买域名的新手站长!