当前位置: 首页 > news >正文

网站建设怎么做分录论坛推广怎么做

网站建设怎么做分录,论坛推广怎么做,做网站的大型公司,网站怎么做全站搜索本章讨论的话题是接口:从鸭子类型的代表特征动态协议,到使接口更明确、能验证实现是否符合规定的抽象基类(Abstract Base Class,ABC)。 11.1 Python 文化中的接口和协议 对 Python 程序员来说,“X 类对象”“X 协 议”和“X 接口”都是一个…

本章讨论的话题是接口:从鸭子类型的代表特征动态协议,到使接口更明确、能验证实现是否符合规定的抽象基类(Abstract Base Class,ABC)。

11.1 Python 文化中的接口和协议

对 Python 程序员来说,“X 类对象”“X 协 议”和“X 接口”都是一个意思。

11.2 Python 喜欢序列

Python 数据模型的哲学是尽量支持基本协议。

为了迭代对象,解释器会尝试调用两个不同的方法。

11.3 使用猴子补丁在运行时实现协议

shuffle 函数要调换集合中元素的位置,而 FrenchDeck 只实现了不可变的序列协议。可变的序列还必须提供 __setitem__ 方法。

>>> def set_card(deck, position, card):
...     deck._cards[position] = card
...
>>> FrenchDeck.__setitem__ = set_card
>>> shuffle(deck) 

这种技术叫猴子补丁:在运行时修改类或模块,而不改动源码。

11.4 Alex Martelli的水禽

基本上不需要自己编写新的抽象基类,只要正确使用现有的抽象基类,就能获得 99.9% 的好处,而不用冒着设计不当导致的巨大风险。

11.5 定义抽象基类的子类

11.6 标准库中的抽象基类

11.6.1 collections.abc 模块中的抽象基类

Iterable、Container 和 Sized

各个集合应该继承这三个抽象基类,或者至少实现兼容的协议。Iterable 通过 __iter__ 方法支持迭代,Container 通过 __contains__ 方法支持 in 运算符,Sized 通过 __len__ 方法支持 len() 函数。

Sequence、Mapping 和 Set

这三个是主要的不可变集合类型,而且各自都有可变的子类。

MappingView

映射方法 .items().keys().values() 返回的对象分别是 ItemsViewKeysViewValuesView 的实例。前两个类还从 Set 类继承了丰富的接口。

Callable 和 Hashable

这两个抽象基类与集合没有太大的关系,只不过因为 collections.abc 是标准库中定义 抽象基类的第一个模块,而它们又太重要了,因此才把它们放到 collections.abc 模块 中。我从未见过 CallableHashable 的子类。这两个抽象基类的主要作用是为内置函 数 isinstance 提供支持,以一种安全的方式判断对象能不能调用或散列。·

Iterator

注意它是 Iterable 的子类。

11.6.2 抽象基类的数字塔

  • Number
  • Complex
  • Real
  • Rational
  • Integral

11.7 定义并使用一个抽象基类

import abcclass Tombola(abc.ABC):@abc.abstractmethod
def load(self, iterable):
"""从可迭代对象中添加元素。"""@abc.abstractmethod
def pick(self):
"""随机删除元素,然后将其返回。 如果实例为空,这个方法应该抛出`LookupError`。
"""def loaded(self):
"""如果至少有一个元素,返回`True`,否则返回`False`。"""return bool(self.inspect())def inspect(self):
"""返回一个有序元组,由当前元素构成。"""items = []while True:try:items.append(self.pick())except LookupError:breakself.load(items)return tuple(sorted(items))
  • 自己定义的抽象基类要继承 abc.ABC。
  • 抽象方法使用 @abstractmethod 装饰器标记,而且定义体中通常只有文档字符串。
  • 抽象基类可以包含具体方法抽象基类中的具体方法只能依赖抽象基类定义的接口(即只能使用抽象基类中的其他具体方法、抽象方法或特性)。
  • 即便实现了,子类也必须覆盖抽象方法,但是在子类中可以使用 super() 函数调用抽象方法,为它添加功能,而不是从头开始实现。

11.7.1 抽象基类句法详解

11.7.2 定义Tombola抽象基类的子类

11.7.3 Tombola的虚拟子类

@Tombola.register
class TomboList(list):

注册之后,可以使用 issubclass 和 isinstance 函数判断 TomboList 是不是 Tombola 的子类。Tombolist 没有从 Tombola 中继承任何方法。

11.8 Tombola子类的测试方法

11.9 Python使用register的方式

Sequence.register(tuple)
Sequence.register(str)
Sequence.register(range)
Sequence.register(memoryview)

11.10 鹅的行为有可能像鸭子

http://www.hkea.cn/news/300715/

相关文章:

  • 网站开发python电脑培训班有哪些科目
  • 惠州响应式网站哪家好云盘搜索
  • spring做网站合肥seo排名收费
  • 做58网站怎么赚钱二十个优化
  • 做企业手机网站北京seo网站开发
  • 关于网站建设中原创文章的一些想法体育热点新闻
  • 天河做网站开发免费留电话号码的广告
  • 成都市金堂县网站建设免费seo在线工具
  • 计算机培训中心网站高端网站建设的公司
  • 成都建设路小学网站大作设计网站
  • 桂林创新大厦网站今日十大热点新闻事件
  • 做网站空间哪家好windows7系统优化工具
  • 网站建设首选公司seo推广一个月见效
  • 微信做模板下载网站有哪些推广网站要注意什么
  • 做网站 java c常德seo快速排名
  • 仙桃做网站找谁常用的网络推广方法
  • 品牌推广网站怎样做百度手机助手苹果版
  • 武汉工业网站制作百度人工服务热线24小时
  • 新闻头条最新消息今日头条站长之家seo综合
  • app与网站宁波seo网络推广渠道介绍
  • 国外学做咖啡的网站百度高级搜索网址
  • 建网站开源代码游戏推广怎么找玩家
  • 莱州哪里有做网站的浙江网站建设平台
  • ps网站设计与制作免费推广seo
  • 网站查询功能怎么做关键词搜索量怎么查
  • 付费网站推广网站优化包括哪些内容
  • 在日本做色情网站广州seo外包
  • 最棒的网站建设考研最靠谱的培训机构
  • 广州建设企业网站黑河seo
  • 招商网站建设性价比高seo排名优化的