"); //-->
来源 | CSDN博客今天我们将进入类的继承以及对类的方法重写及重载的学习!话不多说直接进入正题!!
类的继承
如果要编写的类是另一个现成类的特殊版本,那我们就可以使用继承。一个类继承另一个类时,将自动获得另一个类的所有属性和方法,原有的类称为父类,而新的类称为子类,子类继承父类的所有属性和方法,同时还可以定义自己的属性和方法。继承的特点
子类不重写__ init __ 的继承(子类需要自动调用父类的方法)子类不重写 __ init __,实例化子类时,会 自动调用父类定义的 __ init __。
# 创建一个父类class Base_father: def __init__(self,name,age): self.name = name self.age = age print('调用了父类的name')
# 创建子类class Base_son(Base_father):
def getname(self): print(f'姓名:{self.name}') print(f'年龄:{self.age}') return '运行完毕!!'
num1 = Base_son('suliang',21)print(num1.getname())
运行结果:
在子类中没有重写 __ init __方法,在调用子类进行实例化时,就默认调用父类的 __ init __ 方法。
子类重写__ init __ 的继承(子类不需要自动调用父类的方法)如果重写了__ init __ 时,实例化子类,就不会调用父类已经定义的 __ init __。
运行结果:# 创建一个父类class Base_father: def __init__(self,name,age): self.name = name self.age = age print('调用了父类的name')
# 创建子类class Base_son(Base_father): def __init__(self,name,age): self.name = name self.age = age print('调用了我自己定义的方法!!')
def getname(self): print(f'姓名:{self.name}') print(f'年龄:{self.age}') return '运行完毕!!'
num1 = Base_son('suliang',21)print(num1.getname())
如果重写了__ init __ 时,要继承父类的构造方法,可以使用 super关键字。语法:super(子类,self).__ init __(参数)
# 创建一个父类class Base_father: def __init__(self,name,age): self.name = name self.age = age print('调用了父类的name')运行结果:
# 创建子类class Base_son(Base_father): def __init__(self,name,age): #利用super调用父类的构造函数 super(Base_son, self).__init__(name ,age) print('-'*50) self.name = name self.age = age print('调用了我自己定义的方法!!')
def getname(self): print(f'姓名:{self.name}') print(f'年龄:{self.age}') return '运行完毕!!'
num1 = Base_son('suliang',21)print(num1.getname())
子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。优点:子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法。重载重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。二者区别
对方法重写如果父类方法的功能不能满足你的需求,就可以在子类重写你父类的方法。
class Father: def __init__(self,name): self.name = name
def list(self): print(f'name:{self.name}')
class Son(Father): def list(self): print(f'姓名:{self.name}') return '执行完毕!!'
num1 = Son('suliang')print(num1.list())
运行结果:
基础重载方法
构造函数
__ init __ ( self [,args] )
__ del __( self )
__ repr __( self )
__ str __( self )
__ cmp __ ( self, x )
方法重载的具体方法将在下一章进行详细介绍。在此之作简单说明!!类的属性和方法()
类的私有属性
在定义类的属性时,在前面加入__(两个下划线)即代表私有属性,只能在类的内部调用,而不能在外部调用。
class List: a = 5 #类的公有属性 __b = 6 #类的私有属性
obj = List()print(obj.a)print(obj.__b)
运行结果:
在定义方法时,在前面加入 __ (两个下划线)即可定义一个私有方法,只能在类的内部调用,语法为self.__方法名
class List: def __init__(self ,a,b ): self.a = a self.b =b def pri1(self): # 定义一个公有方法 print(f'{self.a + self.b}') return ' ' def __pri2(self): # 定义一个私有方法 print(f'{self.a *self.b}')
def pri3(self): self.__pri2() # 在内部调用私有方法 return ' '
obj = List(5,10)print(obj.pri1())print(obj.pri3())
运行结果:
以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问。
双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。
_前面双下划线_定义的是特殊方法,一般是系统定义名字 ,类似 __ init __() 之类的。小结
本篇文章带大家了解了类的继承,方法的重写以及重载的内容。一顿操作下来是不是觉得并不难呢,当然这都是基础语法,深入的还需大家理解这其中的内涵,再慢慢的去实践。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
利用元学习保持无人机飞行控制系统在正确的轨道上
SHIPT算法挤压了外包工人 如何对雇主进行审计
嵌入式开发者都该了解的十大算法
无线传感器网络低功耗分簇路由算法设计
基于LPC2138的血压测量算法开发平台电路图
[转帖]us/os就绪表的维护算法分析
自动驾驶:新算法公平分配风险
CRC算法原理及C语言实现
求FSK信号的解调算法,主要是铁路上的移频信号!
PID算法
vxwokrs下静态图像压缩算法(上)
目标跟踪算法在红外热成像跟踪技术上的应用
抖音背后的算法推荐逻辑
基于算法的工程助手:AI重塑零件采购
数字PID控制及其改进算法的应用
代码示例|一文读懂压缩算法
如何在低算力MCU平台上优雅的计算均值和方差
计算机科学与技术反思录(2)
数字PID控制算法之一
有关指纹算法
无人机飞控的PID算法
面向算法硬件加速的FPGA实现方法
简单实用的单片机CRC 快速算法
采用Mean-Shift和Camshift算法相结合的火焰视频图像跟踪设计
加密算法之MD5算法