小程序 less wxss 混合 Mixins picker样式优化 箭头样式的实现原理
8.12 定义接口或者抽象基类
问题
你想定义一个接口或抽象类,并且通过执行类型检查来确保子类实现了某些特定的方法
解决方案
使用 abc 模块可以很轻松的定义抽象基类:
from abc import ABCMeta, abstractmethod class IStream(metaclass=ABCMeta):
@abstractmethod
def read(self, maxbytes=-1):
pass @abstractmethod
def write(self, data):
pass
抽象类的一个特点是它不能直接被实例化,比如你想像下面这样做是不行的:
a = IStream() # TypeError: Can't instantiate abstract class
# IStream with abstract methods read, write
抽象类的目的就是让别的类继承它并实现特定的抽象方法:
class SocketStream(IStream):
def read(self, maxbytes=-1):
pass def write(self, data):
pass
抽象基类的一个主要用途是在代码中检查某些类是否为特定类型,实现了特定接口:
def serialize(obj, stream):
if not isinstance(stream, IStream):
raise TypeError('Expected an IStream')
pass
除了继承这种方式外,还可以通过注册方式来让某个类实现抽象基类:
import io # Register the built-in I/O classes as supporting our interface
IStream.register(io.IOBase) # Open a normal file and type check
f = open('foo.txt')
isinstance(f, IStream) # Returns True
@abstractmethod 还能注解静态方法、类方法和 properties 。 你只需保证这个注解紧靠在函数定义前即可:
class A(metaclass=ABCMeta):
@property
@abstractmethod
def name(self):
pass @name.setter
@abstractmethod
def name(self, value):
pass @classmethod
@abstractmethod
def method1(cls):
pass @staticmethod
@abstractmethod
def method2():
pass
讨论
标准库中有很多用到抽象基类的地方。collections 模块定义了很多跟容器和迭代器(序列、映射、集合等)有关的抽象基类。 numbers 库定义了跟数字对象(整数、浮点数、有理数等)有关的基类。io 库定义了很多跟I/O操作相关的基类。
你可以使用预定义的抽象类来执行更通用的类型检查,例如:
import collections # Check if x is a sequence
if isinstance(x, collections.Sequence):
... # Check if x is iterable
if isinstance(x, collections.Iterable):
... # Check if x has a size
if isinstance(x, collections.Sized):
... # Check if x is a mapping
if isinstance(x, collections.Mapping):
尽管ABCs可以让我们很方便的做类型检查,但是我们在代码中最好不要过多的使用它。 因为Python的本质是一门动态编程语言,其目的就是给你更多灵活性, 强制类型检查或让你代码变得更复杂,这样做无异于舍本求末。
小程序 less wxss 混合 Mixins picker样式优化 箭头样式的实现原理的更多相关文章
- 微信小程序:WXSS 样式
微信小程序:WXSS 样式 一.WXSS 样式 XSS 具有 CSS 大部分的特性,小程序在 WXSS 也做了一些扩充和修改. 1,新增了尺寸单位: 在写 CSS 样式时,开发者需要考虑到手机设备的屏 ...
- 小程序中WXSS样式控制
WXSS WXSS(WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式. WXSS 用来决定 WXML 的组件应该怎么显示. 为了适应广大的前端开发者,WXSS 具 ...
- 【微信小程序】——wxss引用外部CSS文件及iconfont
小程序引入外部文件的方式是:@import "*/*.wxss"; 因为业务需要,正在开发的小程序中需要使用iconfont,很容易想到了H5的引入方式: ```` @font-f ...
- 【微信小程序】——wxss引用外部CSS文件及iconfont,图文教程
小程序引入外部文件的方式是:@import “/.wxss”; 小程序的wxss文件font-face的url不接受http地址作为参数,可以接受base64,因此可以先将字体文件下载后,转换为bas ...
- 小程序地区时间自定义选择器 picker
进入微信公众平台小程序开发文档搜索 picker 点进去后下滑,点击在开发者工具中预览即可
- 微信小程序之分享或转发功能(自定义button样式)
小程序页面内发起转发 通过给 button 组件设置属性open-type="share",可以在用户点击按钮后触发 Page.onShareAppMessage 事件,如果当前页 ...
- [微信小程序]编译.wxss出错,2 not found
小程序新建项目就出错:2 not found 编译.wxss文件出错(不是一般的郁闷,新建项目就报错...) 大概的情况是开发工具没有更新.或更新不到, 第一,可以删掉开发工具重新下载最新安装: 第 ...
- [微信小程序] 微信小程序下拉滚动选择器picker绑定数据的两种方式
小程序 picker 多列选择器 数据动态获取 需求是将各校区对应各班级的数据 以两列选择器的方式展示出来,并且可以在选择完成之后记录选结果参数. 校区数据 和 班级数据 分别是两个接口,以 校区 t ...
- 如何自定义微信小程序swiper轮播图面板指示点的样式
https://www.cnblogs.com/myboogle/p/6278163.html 微信小程序的swiper组件是滑块视图容器,也就是说平常我们看到的轮播图就可以用它来做,不过这个组件有很 ...
随机推荐
- 帮朋友转发招聘信息 南京知名互联网公司招聘java、测试、前端,具体私聊
一.java开发 1.5年及以上J2EE方向开发经验 2.精通spring等开源框架 3.熟悉html.javascript.css.jsp/freemarker.jquery的使用 4.熟悉使用my ...
- MongoDB笔记(一):MongoDB介绍及Windows下安装
一.前言 MongoDB火了也蛮久了,关于简介看看这里吧.项目中一直没用上,最近闲的慌就自己学了下,顺便记录下以便今后复习. 本系列是基于MongoDB 2.4.8 windows 64位讲解,后面的 ...
- centos7单机版安装hbase
1.首先安装jdk1.8 yum install java-1.8.0-openjdk* -y 2.下载hbase 地址:http://mirrors.shuosc.org/apache/hbase/ ...
- Centos开机自己主动挂载windows中的ntfs磁盘
装了windows和centos双系统后,发如今centos中无法进入windows中的磁盘,更不要说查看磁盘里的文件了! 原来默认情况下.centos不支持Widows NTFS硬盘分区读写,要想把 ...
- 自己动手开发更好用的markdown编辑器-07(扩展语法)
这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im/2015/05/19/hexomd-07/ 文章目录 1. 准备工作 2. 目录语法 ...
- HDU - 1816 Get Luffy Out *(二分 + 2-SAT)
题目大意:有N串钥匙,M对锁.每串钥匙仅仅能选择当中一把.怎样选择,才干使开的锁达到最大(锁仅仅能按顺序一对一对开.仅仅要开了当中一个锁就可以) 解题思路:这题跟HDU - 3715 Go Deepe ...
- codeforces 183B - Zoo
/* 题意:给出n,m. n表示给出的n个横坐标为1-n,y为0的坐标m表示以下有m个坐标,在横坐标上的点 向各个角度看,在可以看到最多的点在同一条直线上的点的做多值为横坐标这一点的值,最后各个 横坐 ...
- cmpp 短信平台
背景: 物联网一般是在设备上安装sim卡,通过2g网络来进行设备与云端系统的交互,网络都是通过移动的基站来进行网络传输的,所以一旦移动的基站有变动,比如流量降级,光缆割接,其他故障登 都会导致2g络的 ...
- .net站内搜索
蜘蛛,spider 爬网站.爬网站的过程:1.发现网站.百度把csdn当成关键网站,顺着已知的网站链接找到新的网站或者新的页面.SEO(搜索引擎优化)的第一个手段:建外链(外部链接).新网站吸引蜘蛛. ...
- srping mvc学习
HOME 控制器 package ghy.webapp.myapp; import java.text.DateFormat; import java.util.Date; import java.u ...