Python的类和继承
一、类的封装:
- 封装将类的信息隐藏在类内部,不允许外部直接修改该类的变量,只能通过该类提供的方法来实现对隐藏信息的操作和访问
class Boss():
# 类的公共属性
level=1
# 类的初始化(构造方法),在类实例化时自动调用。
def __init__(self,name,hp,sp,atk):
self.name = name
self.hp = hp
self.sp = sp
self.atk = atk
# 创建类的方法,Boss被击中时HP减少
def boss_hp_reduce(self,hero_atk):
# 被击中时HP减少
self.hp -= hero_atk
print("Boss受到了%d点伤害" % hero_atk)
print("Boss现在的生命为%d" % self.hp)
# 攻击到hero时,heroHP减少
def boss_attack(self,hero_hp):
hero_hp -= self.atk
print("Hero受到了%d点伤害" % self.atk)
print("Hero现在的血量为%d" % hero_hp)
# 当Boss魔力值充满时,释放大招
def boss_sp_full(self):
print("Boss:哈哈,我放大招了")
print("Hero被击飞!受到了99999伤害")
print("Hero阵亡了")
# 设定hero的属性,同样可以使用类封装,但是我懒得弄了
hero_atk = 100
hero_hp = 1000
# 创建一个实例
boss = Boss("icedemon",10000,5,350)
# 调用实例的方法
boss.boss_hp_reduce(hero_atk)
boss.boss_attack(hero_hp)
boss.boss_sp_full()
输出结果如下:
>>> Boss受到了100点伤害
>>> Boss现在的生命为9900
>>> Hero受到了350点伤害
>>> Hero现在的血量为650
>>> Boss:哈哈,我放大招了
>>> Hero被击飞!受到了99999伤害
>>> Hero阵亡了
二、类的继承:
- 从父类继承,继承可以让子类从父类获取特征(属性和方法)
- 在面向对象的世界中,从父类继承,就可以直接拥有父类的属性和方法,这样可以减少代码,多复用,子类可以定义自己的属性和方法
class Enemy():
def __init__(self,name,hp,atk):
self.name = name
self.hp = hp
self.atk = atk
def attack(self):
print("%s发起攻击,hero受到了%d点伤害!" % (self.name,self.atk))
# 继承Enemy类
class Enemy2(Enemy):
pass
# 创建实例
enemy = Enemy("毛毛虫",10,2)
enemy1 = Enemy2("小鸡",100,10)
enemy.attack()
enemy1.attack()
父类:Enemy就是Enemy2的父类,也成为基类,超类
子类:Enemy2就是Enemy的子类,也成为派生类
如果未定义时,等同于继承object,在Python中,object是所有类的父类
运行结果
>>> 毛毛虫发起攻击,hero受到了2点伤害!
>>> 小鸡发起攻击,hero受到了10点伤害!
三、类的继承之Super()函数
- 如果子类继承父类不做初始化,那么会自动继承父类属性。
- 如果子类继承父类做了初始化,且不调用super初始化父类构造函数,那么子类不会自动继承父类的属性。
- 如果子类继承父类做了初始化,且调用了super初始化了父类的构造函数,那么子类也会继承父类的属性。
class Enemy():
def __init__(self):
self.name = "蜜蜂"
self.level = 1
def summary(self):
print("%s,等级为%d" % (self.name,self.level))
# 一般来说子类做了初始化就不能继承父类的属性,但可以利用super函数
class Enemy2(Enemy):
def __init__(self):
self.name = "蜘蛛"
self.level = 5
super().__init__()
# 已经初始化的子类不再继承父类的属性,已经存在的方法也是
class Enemy3(Enemy):
def __init__(self):
self.name = "蝴蝶"
self.level = 2
def summary(self):
print("%s,等级为%d" % (self.name,self.level))
enemy = Enemy()
enemy2 = Enemy2()
enemy3 = Enemy3()
enemy.summary()
enemy2.summary()
enemy3.summary()
输出结果:
>>> 蜜蜂,等级为1
>>> 蜜蜂,等级为1
>>> 蝴蝶,等级为2
Python的类和继承的更多相关文章
- Python 笔记 : 类和继承
# -*- coding= utf-8 -*- # 文件编码定义的语法规则是: coding[:=]/s*([-/w.]+) # 未指定编码将默认为 : ASCII # 同时要注意物理文件的编码也要 ...
- Python 基础 类的继承
如果寂静定义了Person类,需要定义新的Student 和Teacher 类时 可以直接从Person 中继承 class Person(Object): def __init__(self,nam ...
- 【python】-- 类的继承(新式类/经典类)、多态
继承 之前我们说到了类的公有属性和类的私有属性,其实就是类的封装,现在准备随笔的 是继承,是面向对象的第二大特性. 面向对象编程 (OOP) 语言的一个主要功能就是“继承”.继承是指这样一种能力:它可 ...
- python基础--类的继承以及mro
继承: 什么是继承: 继承是一种关系,描述两个对象之间什么是什么的关系 在程序中,继承描述的是类和类之间的关系 例如 a继承了b,a就能直接使用b已经存在的方法和属性了 a称之为子类,b称之为父类,成 ...
- Python——12类的继承
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- 【python】类的继承和多态
比如,我们已经编写了一个名为Animal的class,有一个run()方法可以直接打印: class Animal(object): def run(self): print 'Animal is r ...
- Python 派生类子类继承类
1.创建list类的子类Namedlist,初始化新类,创建新对象实例johnny,检查对象类型,并使用list的一些功能来存储数据 >>> class Namedlist(list ...
- (转)Python异常类的继承关系
原文:https://blog.csdn.net/Dragonfli_Lee/article/details/52350793 https://www.cnblogs.com/Lival/p/6203 ...
- python的类的继承-接口继承-归一化设计
1.先在子类本身找,如果子类没有,会去父类找 class Dad: '这个是爸爸类' money=10#Dad类的数据属性 def __init__(self,name): print("爸 ...
随机推荐
- [LeetCode]4.寻找两个正序数组的中位数(Java)
原题地址: median-of-two-sorted-arrays 题目描述: 示例 1: 输入:nums1 = [1,3], nums2 = [2] 输出:2.00000 解释:合并数组 = [1, ...
- Azure AD(六)添加自定义域名
一,引言 每当我们在 Azure Portal 上创建新的租户时,都会在设置租户的 "初始域名" 后加上 ".onmicrosoft.com",默认情况下 &q ...
- 利用 docker 部署 elasticsearch 集群(单节点多实例)
文章目录 1.环境介绍 2.拉取 `elasticserach` 镜像 3.创建 `elasticsearch` 数据目录 4.创建 `elasticsearch` 配置文件 5.配置JVM线程数量限 ...
- ASP.NET Core 6框架揭秘实例演示[06]:依赖注入框架设计细节
由于依赖注入具有举足轻重的作用,所以<ASP.NET Core 6框架揭秘>的绝大部分章节都会涉及这一主题.本书第3章对.NET原生的依赖注入框架的设计和实现进行了系统的介绍,其中设计一些 ...
- oracle11g在windows下安装
oracle下载 https://www.oracle.com/database/technologies/oracle-database-software-downloads.html 下载11g ...
- C#帕斯卡命名法
帕斯卡命名法 命名规则. 单字之间不以空格断开或 连接号 (-).底线(_)连结,第一个单词首字母采用 大写字母 :后续单词的首字母亦用大写字母,例如:FirstName.LastName.. 每一个 ...
- 探究Spring原理
探究Spring原理 探究IoC原理 首先我们大致了解一下ApplicationContext的加载流程: 我们可以看到,整个过程极为复杂,一句话肯定是无法解释的,所以我们就从ApplicationC ...
- vue实时显示当前时间且转化为“yyyy-MM-dd hh:mm:ss”格式
在实际运用中时间格式"yyyy-MM-dd hh:mm:ss"用的最多,如果需要其他格式可根据需求自行修改,下面直接上代码: 引入相应的js即可运行 <!DOCTYPE ht ...
- pandas模块篇(之三)
今日内容概要 目标:将Pandas尽量结束 如何读取外部excel文件数据到DataFrame中 针对DataFrame的常用数据操作 索引与切片 操作DataFrame的字段名称 时间对象序列操作 ...
- MySql的事务及数据的导入导出
Mysql的事务及应用 1.补充数据库的导入与导出 导入 mysql -u root -p database < E:/SS/Test.sql -- 即执行sql文件 导出 -- 结构+数据 m ...