潭州课堂25班:Ph201805201 第十一课 继承,多继承和魔术方法,属性和方法 (课堂笔记)
继承:
class p :
cls_name = 'p'
def __init__(self):
print('正在实例化')
def __del__(self):
print('正在销毁') class cb(p): # 当前类继承()中类
pass c = cb()
print(c)
重写:
class p :
cls_name = 'p'
def __init__(self):
print('正在实例化')
def __del__(self):
print('正在销毁') class cb(p): # 当前类继承()中类
def __init__(self): ## 在子类中 重写 方法
print('正在实例化子类') c = cb()
print(c)
多继承
一个类可以继承另一个类,继承之后,他就可以用这个类(父类)的方法和属性,
且类可以继承多个类,
在继承多个类中,如果多个父类的中有一样的方法,继承第一个类中的方法,
class pa :
cls_name = 'p'
def __init__(self):
print('正在实例化')
def __del__(self):
print('正在销毁') class pb :
cls_name = 'p'
def __init__(self):
print('正在实例化')
def __del__(self):
print('正在销毁') class cb(pa,pb): # 当前类继承()中类
pass c = cb() # 继承多个父类,且中有相同方法,则继承第一个类中的方法,
print(c)
多继承后子类调用父类的二个方法:
class ParentA:
def a(self):
print('这是个ParentA的类') class ParentB:
def a(self):
print('这是个ParentB的类') class Child(ParentA,ParentB):
def a(self):
ParentB.a(self) # 方法 1 ,直接调用,
ParentA.a(self)
super().a() # 方法 2 ,用 super 调用,
super(ParentA,self).a() # 些时调用的是 A 的下一个,
print('这是个ChildB的类') x = Child()
x.a()
super用法,:默认调用第一顺序位的父类方法,
可以通过给其参数,来确定调用哪个父类方法,
如:super(ParentA,self).a() # 些时调用的是 A 的下一个,
在定义类时,内部会计算出个方法解释顺序,mro列表,其是个简单的所有基类的顺序列表,
print(x.__mro__) x是实例名 直到 'object' 调用方法时:
1 子类先父类,
2 多个父类就按mro顺序
2 下个类存在两个合法选择,左先于右
魔术方法:
实例拼接
# 实例拼接 class A:
def __add__(self, other):
print('A 的 add 方法') class B:
def __add__(self, other):
print('B 的 add 方法') a = A()
b = B()
a + b ————》》》 A 的 add 方法
str 方法: 在测试中可常用
class C:
def __str__(self):
print('C 的 str 方法')
return 'str 返回值' # 这里必须有返回值 s = C()
print(s) ————》》》》》
C 的 str 方法
str 返回值
repr, 当有 str 时不会触发repr
class C:
# def __str__(self):
# print('C 的 str 方法')
# return 'str 返回值' def __repr__(self):
print('C 的 repr 方法')
return 'repr 返回值' s = C()
print(s)
str(s) ——————》》》 C 的 repr 方法
repr 返回值
call 方法
class C:
# def __str__(self):
# print('C 的 str 方法')
# return 'str 返回值' def __repr__(self):
print('C 的 repr 方法')
return 'repr 返回值' def __call__(self, *args, **kwargs):
print('一在调用 call 方法') s = C() # 实例()触发 call 方法,如果没有该方法,会报错
s()
补充:接口继承:
# 接口继承:
import abc class All_file ( metaclass = abc.ABCMeta ):
@ abc.abstractclassmethod # 这下边的方法不用具体实现,
def read(self):
pass @ abc.abstractclassmethod
def write(self):
pass class Disk(All_file):
def read(self):
print('disk,read') def write(self):
print('disk,write') class Cdrom(All_file):
def read(self):
print('cdrom,read') def write(self):
print('cdrom,write') class Mem(All_file):
def read(self):
print('mem,read') def write(self):
print('mem,write') m1 = Mem() # 接口就是一个函数,接口继承:定义个基类, 基类中把自己的方法,
# 定义居接口,@ abc.abstractclassmethod,让继承的子类必须实现接口方法,
# 不实现,不能实例化,
以一切皆文件为例,做 读 写 的操作,定义个父类,作用在于规范子类,无需实现具体功能,
让其他硬件 如 硬盘,光盘 ,内存 为子类继承父类 (读写)要求,
如功能缺失,不能实例化
潭州课堂25班:Ph201805201 第十一课 继承,多继承和魔术方法,属性和方法 (课堂笔记)的更多相关文章
- 潭州课堂25班:Ph201805201 第十课 类的定义,属性和方法 (课堂笔记)
类的定义 共同属性,特征,方法者,可分为一类,并以名命之 class Abc: # class 定义类, 后面接类名 ( 规则 首字母大写 ) cls_name = '这个类的名字是Abc' # 在类 ...
- 潭州课堂25班:Ph201805201 WEB 之 页面编写 第四课 登录注册 (课堂笔记)
index.html 首页 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- 潭州课堂25班:Ph201805201 WEB 之 页面编写 第三课 (课堂笔记)
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 潭州课堂25班:Ph201805201 WEB 之 页面编写 第二课 (课堂笔记)
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 潭州课堂25班:Ph201805201 WEB 之 页面编写 第一课 (课堂笔记)
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 潭州课堂25班:Ph201805201 爬虫基础 第八课 selenium (课堂笔记)
Selenium笔记(1)安装和简单使用 简介 Selenium是一个用于Web应用程序测试的工具. Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, ...
- 潭州课堂25班:Ph201805201 django 项目 第三十一课 在线课堂视频点播的实现(课堂笔记)
在线课堂 一.数据库模型设计 # 在apps/course/models.py中定义如下模型: from django.db import models from utils.models impor ...
- 潭州课堂25班:Ph201805201 tornado 项目 第十一课 项目改进和优化(课堂笔记)
使用 Bootstrap 前端框架 可以在 bootCDN 这里找 jquery ,poppe.js 文件 当聊天室发来一第图片链接时,自动保存图片到服务器,并保存相关信息到数据库,系统向该用户发出 ...
- 潭州课堂25班:Ph201805201 django 项目 第二十一课 文章主页 新闻列表页面功能 (课堂笔记)
新闻列表页功能 1.分析 业务处理流程: 判断前端传的标签分类id是否为空,是否为整数.是否超过范围 判断前端传的当前文章页数是否为空,是否为整数.是否超过范围 请求方法:GET url定义:/new ...
- 潭州课堂25班:Ph201805201 django 项目 第十一课 手机号是否存在,短信验证分析 (课堂笔记)
判断手机号是否注册功能实现 1.分析 请求方法:GET url定义:/mobiles/(?P<mobile>1[3-9]\d{9})/ 请求参数:url路径参数 参数 类型 前端是否必须传 ...
随机推荐
- 关于 MVCC 的基础【转】
1. 什么是MVCC 1.1 基础概念 MVCC,Multi-Version Concurrency Control,多版本并发控制.MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据 ...
- vue的学习(常用功能)
1.介绍vue MVP和MVVM模式!!! mvp模式,其中m是模型是ajax请求数据, v是视图层(html),p是控制器,就是使用jq来实现业务逻辑相关操作(DOM操作很多) MVVM模式,其中M ...
- Qt Excel
在pro文件添加 QT +=axcontainer 头文件 #include <QAxObject> void MainWindow::on_btnSelectFileDialog_cli ...
- xpath定位
XML 实例文档 我们将在下面的例子中使用这个 XML 文档. <?xml version="1.0" encoding="ISO-8859-1"?> ...
- php高级工程师面试题,行不行对照看下自己的实力
在网上看到一些高级php 的面试题目.. 最近接连面试了几家公司,有些重要问题记录一下,督促自己学习提高,同时希望给朋友们一些帮助.内容很多,一点点完善,一步步学习..有些是面试被问,有些是招聘要求, ...
- graphql详解
随着系统业务量的增大不同的应用和系统共同使用着许多的服务api,而随着业务的变化和发展,不同的应用对相同资源的不同使用方法最终会导致需要维护的服务api数量呈现爆炸式的增长,比如我试着跑了下我们自己业 ...
- python 全栈开发,Day13(迭代器,生成器)
一.迭代器 python 一切皆对象 能被for循环的对象就是可迭代对象 可迭代对象: str,list,tuple,dict,set,range 迭代器: f1文件句柄 dir打印该对象的所有操作方 ...
- Tomcat开启JMX监控 visualvm
Tomcat开启JMX监控 https://blog.csdn.net/dongdong2980/article/details/78476393
- codeforces 758D Ability To Convert【DP】
在N进制下给你一个数,要你转换成最小的十进制数; 状态转移方程:从前向后 dp[j]表示j位前数列的最小十进制数 dp[j]=min(dp[j],dp[i]*n+x) 程序: #include < ...
- asp.net core 微信获取用户openid
获取openid流程为首先根据微信开发参数构造AuthorizeUrl认证链接,用户跳转到该链接进行授权,授权完成将跳转到回调页(首次认证需要授权,后面将直接再跳转至回调页),此时回调页中带上一个GE ...