php 魔术方法 多继承,day23:单继承多继承菱形继承__init__魔术方法
原文:https://www.cnblogs.com/libolun/p/13434675.html
单继承
关于继承的一些基本概念
1.什么是子类?什么是父类?如果一个类继承另外一个类,该类叫做子类(衍生类),被继承的类叫做父类(基类,超类)
2.继承的种类:1.单继承 2.多继承
3.object类:在python中,所有的类都默认继承父类object
定义一个Human类,并定义一些属性和方法:
classHuman(object):
hair= "黑色"sex= "男"
defcry(self):print("人类会哭")defeat(self):print("人类会吃东西")def __makebaby(self):print("人类会繁衍生息")
子父继承之后,子类可以调用父类的公有成员
#1.子父继承之后,子类可以调用父类的公有成员
class Man(Human): #定义Man类,继承Human类
passobj=Man()print(obj.hair) #子类Man直接调用父类的hair属性
obj.cry() #子类Man直接调用父类的cry方法
子父继承之后,子类不能调用父类的私有成员
#2.子父继承之后,子类不能调用父类的私有成员
classWoman(Human):defpub_func(self):
self.__makebaby()
obj=Woman()
obj.__makebaby() #error 子类无法直接调用父类的私有成员
obj.pub_func() #error 即使在子类定义pub_func用来存放私有成员,那也是父类的私有成员,而非子类的
子父继承之后,子类可以改写父类中的方法
子父继承之后
1.如果子类里面有该成员属性或者方法,优先调用自己的
2.如果子类没有该成员,则调用父类中的成员
3.如果子类父类都没有该成员,则直接报错
classChildren():
sex= "女"
defcry(self):print("小孩会哇哇哇哭")
obj=Children()
obj.cry()#子类有cry方法,优先使用子类的
多继承
多继承的基本语法
#1.基本语法
classFather():
property= "爸爸英姿飒爽"
deff_hobby(self):print("爸爸喜欢抽烟")classMother():
property= "妈妈倾国倾城"
defm_hobby(self):print("妈妈喜欢打麻将")class Daughter(Father,Mother): #Daughter类继承Father类和Mother类
pass
#实例化对象
obj =Daughter()print(obj.property) #优先会继承Father类的property
obj.m_hobby() #妈妈喜欢打麻将
super用法
1.super本身是一个类,super()是一个对象,用来调用父类的绑定方法
2.super()只应用在绑定方法中,默认自动传递self对象(前提super所在作用域存在self)
3.super用途:解决复杂的多继承调用顺序
classFather():
property= "爸爸英姿飒爽"
deff_hobby(self):print("爸爸喜欢抽烟")classMother():
property= "妈妈倾国倾城"
defm_hobby(self):print("妈妈喜欢打麻将")classSon(Father,Mother):
property= "儿子喜欢玩游戏"
#1.利用类来调用父类的成员
defskill1(self):
Father.f_hobby()print(Mother.property)#2.利用对象调用父类的成员
defskill2(self):
self.m_hobby()print(self.property)#3.利用super调用父类的属性和方法
"""super()只调用父类的相关公有成员,不会调用自己的本类成员,父类没有直接报错
super()在调用父类方法时,只调用父类的绑定方法,默认传递参数是本类的对象self"""
defskill3(self):print(super().property)
super().m_hobby()
obj=Son()
obj.skill1()
obj.skill2()
obj.skill3()
self和super的区别
self和super()的区别:
self在调用成员时,先看看自己的类对象是否存在该成员
1.如果有调用自己的.
2.如果子类自己没有,调用父类的
3.如果子类和父类都没有,则直接报错
super()在调用成员时,只调用父类的相关成员(属性,绑定方法)
永远不会调用自己的,如果父类没有,直接报错
菱形继承(钻石继承)
super:用来解决复杂的多继承调用顺序
classOldWoman():pass
classHuman():
pty= 4
deffeelT(self):print("原始人类热了,吃冰块1")print(self.pty)print("原始人类冷了,生火取暖2")classMan(Human):
pty= 3
deffeelT(self):print("现代男人热了,光膀子3")
super().feelT()print("现代男人冷了,穿大棉袄4")classWoman(Human):
pty= 2
deffeelT(self):print("现代女人热了,吹空调5")
super().feelT()print("现代女人冷了,喝热水6")classChildren(Man,Woman):
pty= 1
deffeelT(self):print("现代小孩热了,哇哇哭7")
super().feelT()print("现代小孩冷了,也要哭8")
obj=Children()
obj.feelT()
执行顺序是73512648,继承顺序Children->Father->Mother->Human
执行完毕之后还需要将每个类中的feelT方法中剩余的代码执行完
整个代码的执行顺序像递归中"一来一回"的过程
mro列表:返回调用顺序列表
mro列表:super用途的一个体现,解决复杂的多继承调用顺序关系
类.mro() 返回的是方法调用顺序列表,针对于多继承下的同名方法,按照顺序依次的进行调用
lst =Children.mro()print(lst)"""[
,
,
,
,
]"""
issubclass 判断子父关系 (应用在类当中,判断子父关系)
#issubclass 判断子父关系 (应用在类当中,判断子父关系)
"""只要在一条继承链上即可(有血缘关系)"""res=issubclass(Children,Man)print(res)
res=issubclass(Children,Woman)print(res)
res=issubclass(Children,Human)print(res)
res=issubclass(Children,(Human,Woman,Man,OldWoman))print(res)
res=issubclass(Children,OldWoman)print(res)
isinstance (应用在对象和类之间,判断类型)
#isinstance(应用在对象和类之间,判断类型)
"""只要在一条继承链上即可(有血缘关系)"""res= isinstance(obj,Children) #True
res = isinstance(obj,Human) #True
res = isinstance(obj,(Human,Children,Woman)) #True
res = isinstance(obj,OldWoman) #False
问题:打印的值是多少?
如图所示:
魔术方法之__init__方法
__init__方法简介
1.触发时机:实例化对象,初始化的时候触发
2.功能:为对象添加成员
3.参数:参数不固定,至少一个self参数
4.返回值:无
相关文章:
最新版IntelliJ IDEA 15开发Java Maven项目
IntelliJ IDEA是最好的java开发IDE之一 下载地址:http://www.jetbrains.com/idea/download/1.安装好之后开始创建项目2.选择Maven类型项目,选择JDK3.设置Maven坐标4.需要给新项目Add Framework support5.选择Java EE项目模板6.初始的网站修改pom.xml文件…

Android APP全面屏适配技术要点
全面屏的概念 为什么先要解释一下全面屏,因为这个词在现在来讲就是一个伪命题。全面屏字面意思就是手机的正面全部都是屏幕,100%的屏占比。但是现在推出所谓“全面屏”手机的厂商没有一个能达到全面的。 那么下面来说一下Android开发领域对全面屏的理解和…
PHP数据库连接池SQL Relay安装使用
SQL Relay按照其官网http://sqlrelay.sourceforge.net/index.html上所说是:A powerful database connection management solution. 翻译为中文也就是说SQL Relay是一个开源的数据库池连接代理服务器。目前SQL Relay支持的数据库很多: SQL Relay supports…
oracle实例由,Oracle数据库和实例
Oracle数据库服务器由一个数据库和至少一个数据库实例组成。 数据库是一组存储数据的文件,而数据库实例是一组管理数据库文件的内存结构。 另外,数据库由后台进程组成。一个数据库和一个实例是紧密相连的,因此术语 - Oracle数据库 通常用来指…

说一说activity
activity与service,provider,receiver并称为 android的四大对象。 而activity,是展现界面的必不可少的组件。我这里有几个问题要问了,他是如何加载,他是如何进行npc的。具体是怎么实现的了。 说道activity的加载&#…

zookeeper脑裂
出现: 在搭建hadoop的HA集群环境后,由于两个namenode的状态不一,当active的namenode由于网络等原因出现假死状态,standby接收不到active的心跳,因此判断active的namenode宕机,但实际上active并没有死亡。此…

C语言编写的PHP框架--yaf入门编程
首先--添加dll,修改php.ini--不同的版本,不同的需求 其次,根据教程http://www.laruence.com/manual/tutorial.firstpage.html#tutorial.directory手动搭建好目录结构 入口文件index.php位置稍作修改--个人习惯 入口文件内容 <?php header…
调试JDK源码-ConcurrentHashMap实现原理
调试JDK源码-一步一步看HashMap怎么Hash和扩容 调试JDK源码-ConcurrentHashMap实现原理 调试JDK源码-HashSet实现原理 调试JDK源码-调试JDK源码-Hashtable实现原理以及线程安全的原因ConcurrentHashMap线程安全的总结是我从源码分析出来的: ConcurrentHashMap所谓线…

oracle某个表丢失,丢失一个控制文件并恢复数据库
只丢失或损坏一个控制文件的情况下来恢复数据库,相对来说简单一点。一般来说,控制文件都需要形成一个多路径冗余策略,来提高数据库的安全性。这样的话只需将完好的控制文件复制一个副本放到丢失或者损坏了的控制文件所在路径的目录下…

MySQL:一个死锁分析 (未分析出来的死锁)
最近一个朋友给了我一个死锁 没分析出来搞了好几天,但是把以前出现的一个死锁理了一下流程。这里大概记录一下,并且给出朋友的案例。 RC 隔离级别很少出GAP我已经知道的 继承和分裂会出LOCK_GAP这是代码写死的purge线程可能触发页的分裂融合可能触发内部…
经历一次真实的XSS跨站攻击以及应付之策
这是一个线上真实的事情,黑客已经攻破网站,并主动给我们上报了问题的根源以及解决方案还是不错的。1.前端网站某处存在用户评论输入,黑客再此输出跨站脚本,下面的是从数据库查出来的2.后台管理人员如果浏览到这条数据就会触发这个…

在linux中 要删除abc目录,在 Linux 中,要删除 abc 目录及其全部内容的命令为:
【单选题】星子本地人说( )【判断题】音乐的音响,虽然不能直接传达抽象概念,但是却可以通过同构联觉的去描摹围绕着抽象概念的氛围。( )【判断题】专项耐力负荷量度是通过对糖酵解无氧代谢供能能力与非乳酸供能无氧耐力能力的监控实现的。【单选题】电动轮廓仪是根据( )原理制成…

ECHO.js 纯javascript轻量级延迟加载
演示 <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"utf-8"> <title>简单的JavaScript图像延迟加载库Echo.js</title> <style> .demo img { width: 736px; height: 490px; background: url(images/…

SQL中的case when then else end用法
2019独角兽企业重金招聘Python工程师标准>>> Case具有两种格式。简单Case函数和Case搜索函数。 --简单Case函数 CASE sexWHEN 1 THEN 男WHEN 2 THEN 女 ELSE 其他 END --Case搜索函数 CASE WHEN sex 1 THEN 男WHEN sex 2 THEN 女 ELSE 其他 END这两种方式…

linux run文件夹,Linux下运行run文件
比如realplay.run安装方法如下chmod xrealplay.run./realplay.run然后他就会执行安装了,在过程中可能会要求你输入yes或no安装完后就可以用了,chmod实际上是加权限命令。+x表示可以执行chmod[-cfvR][--help][--version]modefile...说明:Linux/Unix的档案…

POJ2796 Feel Good(单调栈)
题意: 给出一列数据,要求一个区间内最小值与区间内数据总和乘积最大值 要点: 还是单调栈,这次我自己写的,先做了几题比较简单的果然还是有效果的,这题也是一样,按点遍历,网上大神做的…
Solr占用CPU持续过高原因查询
线上java进程占用CPU忽高忽低,就是说一下子40%左右,一下子减下去。这台服务器只有Solr,所以估计是Solr在GC。 # jstat -gcutil 2072 2sJVM名词解释参考java内存泄漏的定位与分析 一些术语的中文解释: S0C:年轻…
通过一个案例理解 JWT
原文出自:https://www.pandashen.com JWT 简述 JWT(json web token)是为了在网络应用环境之间传递声明而基于 json 的开放标准,JWT 的声明一般被采用在身份提供者和服务器提供者间传递被认证的身份信息,以便于从资源服…
gitlab报错 fatal: index-pack failed error: RPC failed; result=18, HTTP code = 200解决方案
gitlab报错 "fatal: index-pack failed error: RPC failed; result18, HTTP code 200",如下图这个问题网上有些人给出这样的解决方法是不行的, 所谓:git config --globalhttp.postBuffer 24288000 git config --list 最有代表的是…

(10)Spring Boot修改端口号【从零开始学Spring Boot】
Spring boot 默认端口是8080,如果想要进行更改的话,只需要修改applicatoin.properties文件,在配置文件中加入: server.port9090 常用配置: ######################################################## ###EMBEDDED SER…

linux查看文件安全权限,Linux系统下如何查看及修改文件读写权限
查看文件权限的语句:在终端输入:ls -l xxx.xxx (xxx.xxx是文件名)那么就会出现相类似的信息,主要都是这些:-rw-rw-r--一共有10位数其中: 最前面那个 - 代表的是类型中间那三个 rw- 代表的是所有者(user)然后那三个 rw- 代表的是组…

【网摘】检测 iframe 是否加载完成
var iframeSet document.getElementById("iframeSet"); //需要检测的 iframe if(iframeSet.attachEvent) {iframeSet.attachEvent("onload", function() {$("#loading").hide();}); } else {iframeSet.onload function() {$("#loading&q…

Java json转Map,转bean,转Listbean
引用jackson /** * json转Map,转bean,转List<bean> by http://blog.csdn.net/21aspnet/ * 需要jackjson jar包 */ public class JsonUtil {/*** Object转Json*/public static String ObjectToJson(Object value) {try {ObjectMapper mapper new…

JVM实用参数 GC日志
为什么80%的码农都做不了架构师?>>> 原文章地址:http://blog.panaihua.com/archives/151 GC日志是一个很重要的工具,它准确记录了每一次的GC的执行时间和执行结果,通过分析GC日志可以优化堆设置和GC设置,或…

linux 搜索so文件,Linux下查找和安装依赖的.so文件
以解决Webex在Linux下运行问题为例说明查找和安装依赖的.so文件方法:查找依赖的.so文件$ ldd $HOME/.webex/1324/*.so | grep not foundlibgtk-x11-2.0.so.0 > not foundlibgdk-x11-2.0.so.0 > not foundlibXmu.so.6 > not foundlibXtst.so.6 > not fou…

CentOS7.4下 VNC Server的搭建和客户端的连接配置
CentOS7.4下 VNC Server的搭建和客户端的连接配置 服务器版本:CentOS Linux release 7.4.1708 (Core) yum方式安装VNC server yum install tigervnc-server 启动vnc 服务初次启动服务时,按提示设置VNC Service密码;服务成功启动后会在 /root/…

Java生成html为pdf
使用这个: http://wkhtmltopdf.org/ 下载:http://download.gna.org/wkhtmltopdf/0.12/0.12.3/wkhtmltox-0.12.3_linux-generic-amd64.tar.xz 解压到/usr目录 调用这个bin /usr/wkhtmltox/bin/wkhtmltopdf需要注意如果中文不显示,显示为框框&…

GCD之信号量机制二
在前面GCD之信号量机制一中介绍了通过信号量设置并行最大线程数,依此信号量还可以防止多线程访问公有变量时数据有误,下面的代码能说明。 1.下面是不采用信号量修改公有变量的值 dispatch_group_t groupdispatch_group_create();// dispatch_semaphore_t semapho…

qtdll在linux系统运行,在QT下编写带DLL的程序
注:我的工作目录是: D:\My Documents\MyProject一.运行QtCreator1.新建工程/选择C Library 这里设计被调用的DLL下一步:然后输入类名:它会生成相应的(.h .cpp)下面一路NEXT就好了.二.1.新建一个空工程名为(MyTest) 这里设计调用DLL的主模块输入工程名后完成2.在工程文件内添…

Python 安装selenium
一、报错信息 No module named selenium 二、系统环境 操作系统:Win10 64位 Python版本:Python 3.7.0 三、安装参考 1、使用pip安装selenium pip install selenium 安装不成功 2、网上下载selenium, 地址:http://pypi.python.org/pypi/seleni…