Python基础知识学习之类的继承

作者:von Libniz 时间:2022-09-02 15:41:05 

一、继承的格式

类的继承格式如下,括号中的为父类名。


class 类名(父类名):
代码

二、单继承

下面我们让Man继承自Master类,并调用继承的showSkill方法。


class Master():
   def __init__(self):
       self.skill='炒菜'
   def showSkill(self):
       print(self.skill)

class Man(Master):
   pass

man=Man()
man.showSkill()

炒菜

三、多继承

我们可以在括号中写入多个父类,并用逗号隔开,就可以表示多继承。
需要注意的是,如果父类中有同名的方法或属性被子类继承,子类优先继承第一个父类的方法。


'''
测试python多继承
多继承时,若父类有同名的属性或方法,则优先继承先继承的父类
'''

class Master():
   def __init__(self):
       self.skill='炒菜'
   def showSkill(self):
       print(self.skill)

class Bagger():
   def __init__(self):
       self.skill='乞讨'
   def showSkill(self):
       print(self.skill)

class Man(Master,Bagger):
   pass

man=Man()
man.showSkill()

炒菜

四、重写父类方法

python中重写父类方法不需要override等任何的关键字,直接把原来的方法重写一遍就好。


class Master():
   def __init__(self):
       self.skill='炒菜'
       print("Master初始化完毕")
   def showSkill(self):
       print(self.skill)

class Bagger():
   def __init__(self):
       self.skill='乞讨'
       print("Bagger初始化完毕")
   def showSkill(self):
       print(self.skill)

#重写父类的方法
class Man(Master,Bagger):
   #重写__init__方法时,并不会调用父类的__init方法
   def __init__(self):
       #重写父类的属性skill
       self.skill='飞天'
   def showSkill(self):
       print("我的技能是:"+self.skill)

man=Man()
man.showSkill()

我的技能是:飞天

五、打印继承关系

通过__mro__()方法我们可以得到当前类继承的所有类。


class Master():
   def __init__(self):
       self.skill='炒菜'
   def showSkill(self):
       print(self.skill)

class Bagger(Master):
   pass

class Man(Bagger):
   pass

man=Man()
print(Man.__mro__)

六、调用父类方法

我们可以通过super().方法名,来调用父类中的 方法,哪怕该方法在子类中被重写了。


class Master():
   def __init__(self):
       self.skill='炒菜'
   def showSkill(self):
       print(self.skill)

class Man(Master):
   def __init__(self):
       self.skill='吃饭'
   def showSkill(self):
       print(self.skill)
       super().__init__()
       super().showSkill()

man=Man()
man.showSkill()

吃饭
炒菜

七、私有属性与方法

我们可以在方法或属性名前加上 __ 来表示私有,在类的继承中,只有父类的私有方法无法被继承,其他属性与方法都将被继承,但私有属性不能在子类中直接访问,但我们可以同过继承的父类公有方法来对其访问。
下面我们定义私有属性money,并创建共有方法set_money与get_money从子类中对其进行访问。


class Master():
   #在属性或方法面前加__,表示访问权限为私有
   __money=100000
   def __init__(self):
       pass
   #设置为私有方法,无法被继承
   def __showMoney(self):
       print(self.__money)
   #使子类可以通过共有方法访问私有属性
   def get_money(self):
       return self.__money
   def set_money(self,money):
       self.__money=money

class Man(Master):
   pass

man=Man()
print("原来的money:"+man.get_money().__str__())
man.set_money(12)
print("后来的money:"+man.get_money().__str__())

原来的money:100000
后来的money:12

来源:https://blog.csdn.net/Demon_LMMan/article/details/117390571

标签:python,类,继承
0
投稿

猜你喜欢

  • 爬山算法简介和Python实现实例

    2023-08-10 04:56:29
  • firefox 2正则表达式

    2008-08-25 19:15:00
  • 20个Javascript手风琴折叠菜单

    2009-10-12 12:09:00
  • SQL语句删除2条重复数据一条保留一条

    2012-07-11 15:51:44
  • [译]2009年海外Web设计风潮(下)

    2009-01-23 09:34:00
  • 分析描述CentOS mysql安装系统

    2010-10-25 20:34:00
  • asp如何正确显示数据库里同时存在的GB码和BIG5编码?

    2010-06-28 18:26:00
  • PHP加密函数 Javascript/Js 解密函数

    2023-06-15 18:03:03
  • 学用代码片段

    2011-09-06 19:37:35
  • ASP中使用Form和QueryString集合

    2007-09-14 10:43:00
  • php 不能连接数据库 php error Can't connect to local MySQL server

    2023-11-07 10:43:50
  • php+Memcached实现简单留言板功能示例

    2023-11-15 09:30:02
  • PHP PDOStatement::fetchObject讲解

    2023-06-09 19:13:37
  • 网站508规范(译)

    2008-04-03 13:26:00
  • 关于SQL Server数据库备份和恢复特性介绍

    2009-02-19 16:57:00
  • 一行代码给你的WordPress Blog添加下雪效果

    2008-12-14 09:43:00
  • php随机取mysql记录方法小结

    2023-11-22 22:27:22
  • Python无头爬虫下载文件的实现

    2023-11-30 03:24:00
  • 仿china.nba.com焦点图轮播展示效果(ie6,ff)

    2008-04-21 12:54:00
  • 认识那些被忽略的SQL Server注入技巧

    2009-01-20 13:15:00
  • asp之家 网络编程 m.aspxhome.com