首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

流畅的 Python 第二版(GPT 重译)(七)

这是最长的部分,不是因为它更重要,而是因为书中其他地方有更多关于鸭子类型、静态鸭子类型和静态类型的部分。...在“数字 ABC 和数值协议”中,我解释了为什么如果您计划同时使用静态类型检查器和鹅式类型检查器的运行时检查,应该使用typing模块中的数值静态协议。...这就是为什么我们必须实现 __delitem__ 和 insert,即使我们的 FrenchDeck2 示例不需要这些行为:因为 MutableSequence ABC 要求它们。...提示 抽象方法实际上可以有一个实现。即使有,子类仍将被强制重写它,但他们可以使用super()调用抽象方法,为其添加功能而不是从头开始实现。...我将继续关注 Mypy 问题#3186,期待这个传奇的下一章有一个让静态类型和鹅类型兼容的美好结局——因为它们应该是兼容的。 ¹ 设计模式:可复用面向对象软件的元素,“介绍”,p. 18。

20110

C# 7.0 探索之旅

模式匹配(Pattern matching) C# 7.0 引入了模式匹配的概念,一种从抽象的角度来说,指可以测试一个值是否有某种特定的“形状”、并在满足这一条件的时候从值中提取信息的句法元素。...C# 7.0 中的模式的例子有: 无序列表c(c 为 C# 中的一个常量表达式)形式的常量模式(Constant pattern),来测试输入是否等于 c T x(T 为一个类型,x 为一个标识符)形式的类型模式...(Type pattern),来测试输入是否有类型 T,并在满足条件的时候将值提取成全新的 T 类型的变量 x var x(x 为一个标识符)形式的变量匹配(Var patterns),这种匹配总是能够成功...如果你指向了一个还未包含这些类型的框架,你可以从 Nuget 中获得它们: 在解决方案管理器中右击项目并选中“管理 NuGet 程序包” 选择“浏览”标签并将“nuget.org”选为“程序包源” 搜索...(为什么它使用 out 参数而不是返回一个元组?那是因为这样一来你可以对不同的值的数量拥有不同的重载了)。

1.3K90
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ASP.NET Core中GetService()和GetRequiredService()之间的区别

    这通常被认为是反模式,因为它隐藏了类的依赖关系。 然而,有些时候你没有选择的余地。...T>()和GetRequiredServiceT>()方法,如下所示: 我已经从本文的代码中删除了一些前提条件检查; 如果你想看到完整的代码,请在GitHub上查看。...它们只是一种便利,因此您在自己的代码中不需要使用更多的typeof()和类型转换。...但是,如果GetService()返回NULL,我也看到它在使用回退服务时使用。在我看来,这很少是应用程序代码的好模式。回退的编排应该是DI容器配置的一部分,而不是使用服务的位置。...就个人而言,我会在任何地方使用它,即使我只使用内置的DI容器。

    1.7K20

    再谈 Python 中的继承(译)

    为什么许多关于继承的讨论如此令人沮丧,没有结果?其中一个原因是继承的类型不止一种。正如那篇精彩的文章《为什么继承没有任何意义》所解释的2,继承有有三种类型,不应混为一谈——无论你对继承有什么看法。...---- 我非常喜欢 Protocol,因为它允许我完全不受干扰地定义我需要的接口,而且这个定义可以和接口的消费者共存。当你在同一个代码库中对同一个接口有不同的实现时,这点就非常有用。...回顾之前的章节,这是方法 3 的语法,但其实在很多层面,你得到了方法 1 中的类。 在 Go 中看到这一点对我来说是一个启示,因为我自己基于直觉的子类启发式方法符合这种模式,但我不知道如何阐述。...我在这里使用它是因为 Harry——他是该书的作者之一——在我抱怨过后让我写一篇博文。 ---- 我们的目标是实现仓库模式:一个允许你向数据仓库中添加和检索对象的类。...更实际的问题是,如果你想理解代码的工作流,由于去向和来源在类层级中来回横跳,这会很困难。 即使对用户来说也是如此,因为公共 API 是由抽象基类定义的,而不是你实际实例化的那个类!

    27750

    ASP.NET Core中GetService()和GetRequiredService()之间的区别

    这通常被认为是反模式,因为它隐藏了类的依赖关系。 然而,有些时候你没有选择的余地。...T>()和GetRequiredServiceT>()方法,如下所示: 我已经从本文的代码中删除了一些前提条件检查; 如果你想看到完整的代码,请在GitHub上查看。...它们只是一种便利,因此您在自己的代码中不需要使用更多的typeof()和类型转换。...但是,如果GetService()返回NULL,我也看到它在使用回退服务时使用。在我看来,这很少是应用程序代码的好模式。回退的编排应该是DI容器配置的一部分,而不是使用服务的位置。...就个人而言,我会在任何地方使用它,即使我只使用内置的DI容器。

    1.4K60

    Fabric.js 橡皮擦的用法(包含恢复功能)

    CDN 选中 Erasing ,然后滑动到页面底部,根据你项目所需下载开发版或者压缩版 以上是 CDN 的做法,在 标签里,使用 src 引用即可。...中添加了橡皮擦功能,使用 fabric-with-erasing 时无需再下载 Fabric 。...-- 修改画布模式的按钮 --> type="button" onclick="changeAction...代码仓库 ⭐Fabric.js 橡皮擦的用法 推荐阅读 文章 简介 《Fabric.js 基础画笔的用法 BaseBrush》 在阅读本文前我强烈建议你先了解一下基础画笔的用法,因为橡皮擦其实也是个画笔...)》 一键摆正被你旋转过的元素 《Fabric.js 将本地图像上传到画布背景》 除了在初始化时设置画布背景外,我还做了本地上传背景的功能,让画布在运行时也能修改背景图 《在 Vue3中使用Fabric.js

    2.7K30

    Julia 1.0 正式发布,这是新出炉的一份简单中文教程

    其实和 Python 一样,在我日常使用中,作为动态语言,以及因为语法本身适合分块执行,我其实很少会用到断点和专门的 debugger,此外虽然有相关的包,在 1.0 的编译器里也为未来加入 debugger...::T end 这里 Real 是自带的抽象类型,我们之后会讲什么是抽象类型。...MyComplex2{Float32}(1.0f0, 2.0f0) 但是实际上你还可以定义一些自己的构造函数,在 Julia 里因为是没有 class 的,除了构造函数以外的方法都不能写在类型声明内部...类型系统 Julia 的类型主要分为抽象类型(Abstract Type)和实体类型(Concrete Type),实体类型主要分为可变类型(Mutable Type)和不可变类型(Immutable...某个实体类型(concrete type)是另外一个抽象类型(abstract type)或者抽象类型是另外一个抽象类型的子类,这样的关系使用 <: 来声明。

    5K20

    流畅的 Python 第二版(GPT 重译)(三)

    现在我们改变主题,看看如何编写匹配任意类实例而不仅仅是我们在“使用序列进行模式匹配”和“使用映射进行模式匹配”中看到的序列和映射的模式。 匹配类实例 类模式旨在通过类型和—可选地—属性来匹配类实例。...Python 变量就像 Java 中的引用变量;一个更好的比喻是,变量视为附加到对象的名称的标签。下一个示例和图将帮助您理解为什么。...③ 这里有证据表明在尝试乘法之前实际上实例化了第二个Gizmo。 ④ 但变量y从未被创建,因为异常发生在赋值的右侧正在被评估时。...因为变量只是标签,所以一个对象可以有多个标签分配给它。当发生这种情况时,就会出现别名,这是我们下一个主题。 身份、相等性和别名 路易斯·卡罗尔是查尔斯·卢特维奇·道奇森教授的笔名。...弱引用在缓存应用中很有用,因为你不希望缓存的对象因为被缓存引用而保持活动状态。 注意 弱引用是一个非常专业的主题。这就是为什么我选择在第二版中跳过它。

    15700

    利用 Canvas 实现 Valine 评论画板涂鸦

    评论涂鸦 前几天在 Joe(https://ae.js.cn/)网站上留言的时候发现了一个叫“画图模式”的东西,点进去后自动切换文本框到画板了(类似QQ涂鸦,你画我猜那种画板),然后可以在画板上画画,...还可以选择画笔粗细、颜色等等,画错了还能撤销各种功能,欸感觉挺有意思的,当时也猜到了应该是用 canvas 做的,不过自己也不太了解这块,但就是感觉挺有意思的,加上我又喜欢魔改 valine 评论,所以立下计划决定给评论系统加上这么一个好玩的功能...粗细),最后绑定完成画板功能事件(撤销、重做、擦除、清除) Valine 通过创建 canvas 画板加入到 valine 评论中,需要先定位到 valine.js 中的 ...="vctrl" 在 vctrl 内部添加画板控制按钮 class="painting-btn" title="Canvas 画图面板">涂鸦画板 主要功能 完成以上配置可以看到已经添加的元素及切换功能...,然后是一大串的 canvas 结合 valine 评论配置(以下代码格式化带注释,有问题可以留言) 已更新移动端代码支持 定位到 e.nodata.show(),e}} 后添加 var

    12410

    无门槛学会数据类型与输入、输出函数,滚雪球学 Python python 入门教程非常详细

    数值数据类型,常见的是整数和浮点数 布尔值数据类型,就是常说的真和假 字符串数据类型 这里要注意,提及到数据类型,特指的是变量的数据类型,在具体学习前,先学会如何看 Python 中的数据类型,才好下手学习...例如,看一下一个值为 10 的变量 x 的数据类型,代码如下: x = 10 print(type(x)) 运行结果为 class 'int'=""> 该输出结果就表示变量 x 的数据类型是整数,你可以用同样的办法测试一个小数...截止到这里,你已经对整数与整数的不同形式展示有了初步的认知,并且这些都不重要,重要的是你学习之后,看到 Python 代码中出现以这些符号开头的内容,你知道它就是一个普通的整数就好了。...2.1.3 数据类型强制转换 这个地方只是类型强制转换的冰山一角,为何学习也是因为你已经掌握了整数和浮点数,大概也对它们之前的区别有了那么一丝认识。...布尔来自英文 boolean 的音译,在 Python 中布尔值有两种,一个是真(True),另外一个就是假(False),使用 type 函数测试数据类型布尔值得到的是 bool。

    48210

    frameWork

    ,我们传入了这个对象的继承的类型,在构造函数调用了RealProxy的构造方法传入我们需要代理的类型Type,然后在这里我写了一个创建对象以及设置拦截器的一个方法,可以看到在这个方法里,我们获取到了这个泛型...T的静态代理的对象,这是我们要返回给上一层的,此处是我们创建的代理对象,在下面我们有创建了一个这个Target的对象,很多人就有些疑惑了,为什么同一类型的对象我们需要创建两次呢,这里呢是因为,如果我们同意的去使用这个静态的代理作为我们的...,这里,就起到了一个隔离作用,简单来说,就是上层对象需要将一个类型代理,走到我们的GetInstance方法中去,我们给他返回这个代理的对象,然后我们类内部同时有一个未被代理的对象在创建出来,这样我们的类有一个没被代理的实例...方法是会报错的,因为Create方法不支持具体的类型,而是对应的父类接口类型,至于抽象类,我没试过,有兴趣的小伙伴可以在后面自己试一下调用Create方法传入的是抽象类的前提下是否可以代理成功。      ...IL的形式去实现      之前的博客中,我有写过IL方面的合集,那实际上通过使用IL我们也可以实现一个动态代理去实现AOP的功能,目前的话,我是没有写相关的代码,但是IL的话 大体思路是这样的,我们去动态创建

    68520

    简易数据分析 15 | Web Scraper 高级用法——CSS 选择器的使用.

    年末事情比较忙,很久不更新了,后台一直有读者催更,我看了一些读者给我的私信,发现一些通用的问题,所以单独写篇文章,介绍一些 Web Scraper 的进阶用法。...1.标签选择器 在这个家庭里,如果我想把所有的家庭成员选中,观察网页结构,你会发现五个人都被 标签包住了,所以我们直接在 Selector 中输入字符 p,就可以选择所有的家庭成员: 同理,如果我们要选择玩具枪...,发现它被 标签包裹着,我们输入 span,就能选择玩具枪: 2.class 选择器 我们想选择父母怎么办?...我们可以利用 CSS 选择器里的 id 选择器,可以输入 #toy(注意:toy 前面有个井号「#」),选中玩具枪: 4.属性选择器 HTML 是一个非常自由的文档,除了官方提供的一些属性,例如 class...这时候用 :nth-of-type(n) 就非常的简单了:弟弟是所有 p 标签的第 5 个元素,所以用 p:nth-of-type(5) 就可以直接选中。

    1.1K30

    Android技术栈(三)依赖注入技术的探讨与实现

    比如dom4j中的Document->Element->Attribute等抽象,非常好地描述了xml的结构,你甚至无需看它的文档就能简单上手,这可比XmlPullParser中定义的一堆常量和事件好理解多了...>,第二行是最外层是dependency标签,这个标签必须要指定一个owner的属性来指定此依赖配置文件所兼容的类型,下面的xml中我指定了android.app.Application作为此xml所兼容的类型...在配置文件中,你可以使用var标签声明一个依赖,并用name属性指定它在上下文中的唯一名字,使用type属性指定它的类型,使用provider属性指定它的提供模式,有两种模式可以选择,singleton...可以看到Liteproj的倾入性还是很低的,除了Service和ViewModel需要强制继承基类,其他组件的基本上都无需代码改动....DependencyManager与组件的生命周期绑定,在组件生命周期结束时,会释放自己占有的所有资源. 7.隐式装配 在继续对比Dagger和Spring两者依赖注入的行为中,我发现Spring有一个

    83100

    【趣文】Rust 公案 | 新锈与大师的对话

    第一守卫用缓慢且严肃的声音对他说:"不匹配的类型:期望 &Target,发现 &T as Deref>::Target",然后就沉默了。 科尔拿着他的羊皮纸,退回到附近的长椅上,几乎要哭了。..."他们在那里,"僧侣说,打破了咒语,"保护你不受寺庙和里面的东西影响。" 科尔转过身来,再次凝视着那扇隐藏的门。"那为什么那扇门会存在?" "因为,即使是他们也不是无懈可击的。...行为建模 在一个温暖的秋日里,法布尔德修士在最近开放的 锈寺 附近的抽象花园里散步。他经过了许多好奇的、精心设计的复杂抽象作品的展示,这时他偶然发现了一个僧侣在她自己的展示中辛勤工作。..."我看到了许多标签;那些是用来做什么的?" "它们定义了每个物体的类(Class)。" 法布尔德弟兄停顿了一下。"什么是类?" 新锈面向他露出困惑的眼神。"你不知道类是什么?" "不,"他回答。"...咒语 新锈 科尔有一天来到图尔大师面前说。"我几乎已经完成了一个程序,在其中我看到了重复的代码模式。这些模式不够规则,无法用函数或特质来抽象。我想使用宏,但不知道该如何进行。"

    48130

    Spring核心——Bean的依赖注入 原

    一个类除了在内部块中通过new关键字实现一个组合关系,也可以通过构造方法传参或接口方法设置。...注入参数 在XML配置中,用来设定注入方式和注入数据的XML标签很多,详细内容就不一一复述了,常规用法可以到官网 Dependencies and configuration in detail  一节了解...基本上他实现的结果和@Autowired差不多,就是让Ioc容器根据bean的类型或者bean名称等自动将容器中其他能对应得上的bean注入到对于的构造方法或者set方法中。...T getBean(ClassT> type){ return applicationContext.getBean(type); } public Object getBean(String...使用动态代理由于是字节码级别的变换,所有有很多限制需要注意:方法和类都不能用fina关键字;测试用例需要自己实现代理模式,否则抽象类没有实现; 第三种方法是使用委派模式,即我们执行A.compute方法时

    68720

    Vue中的表单绑定(全 gif 演示)

    为什么第一项加上value="",因为要默认选中第一项,这样v-model就能匹配第一项。...因此,更推荐像上面这样提供一个值为空的禁用选项。 我选中A就显示A,选中B就显示B,能不能有一个映射代表我选择的第几项呢?比如我选中A就显示1,代表选中第1项,当然是可以的 即使有 type="number" 时,HTML 输入元素的值也总会返回字符串。...v-model.number,即使有 type="number" 时,HTML 输入元素的值也总会返回字符串。...所以我们经常使用的是type="number"和v-model.number搭配使用,前者是只允许输入数字和字母e,而后者是尝试将默认输入的string类型转换成number类型,这通常是很有用的。

    82800

    SpringMVC结合设计模式:解决MyBatisPlus传递嵌套JSON数据的难题

    为了实现这个场景,我们可以使用模板模式。 模板模式是一种行为设计模式,它定义了一个抽象类或接口作为模板,其中包含了一个或多个抽象方法,用于定义算法的骨架。...说说我这边的起因 大概是这样的 要做一个问卷系统 这个问卷里面包含各种各样的标签和因子 就使得 属性里面又包含属性 对象里面又嵌套数组 数组里面又有对象 遇到这种情况相信大家都会很头疼吧 那这种时候很多人就要开始写...Mapper了 这里我提出一个大大节约时间的方法 类型构造器 设计模式的引入 我们知道 每一个属性需要引入一个新的类型构造器 那就要根据他的具体情况重写一个 那岂不是代码量指数级上涨?...); } } 让我逐点解释其妙处: 泛型支持:public class JsonArrayHandlerT> extends BaseTypeHandlerT>> 中的 T>...(String.class); } } 标签列表:数据库中的 tags 字段存储了一组标签。

    23010

    Kubernetes 资源对象序列化实现

    Serializer 因为Kubernetes需要支持json、yaml、protobuf三种数据格式的序列化和反序列化,有必要抽象序列化和反序列化的统一接口,源码链接:https://github.com...Identifier() Identifier } // 标识符就是字符串,可以简单的理解为标签的字符串形式,后面会看到如何生成标识符。...为什么我们平时很少抽象(当然有些读者是有抽象的,我们不能一概而论),是因为我们工作中可能只用到一种序列化格式,所以抽象显得没那么必要。...json中由"apiVersion"和"kind"字段标识的对象的类型和版本。...s.options.Strict { return obj, actual, nil } // 笔者第一眼看到下面的以为看错了,但是擦了擦懵逼的双眼,发现就是YAMLToJSON。

    2K31

    第4章 类和接口

    Java中可以通过包、访问修饰符(private protected public)控制类、接口和成员的可访问性(accessibility) 除了应该暴露的API之外,我们应该尽可能少的开放访问权。...复合(组合) 复合,即使用包装类(wrapper class),其实这也就是设计模式中的装饰者模式 另外值得一提的是,复合以及转发并不是委托(delegation) 装饰者模式的优缺点不多说了,可以看设计模式的笔记...第18条 接口优于抽象类 Java提供两种机制用来定义允许多个实现的类型:接口和抽象类。...Comparable是一个mixin接口 我的理解是:一个类,利用实现多个接口可以达到混合类型的目的,而利用抽象类只能继承一个类,则不能达到混合类型的效果!...有一种接口被称为 常量接口 ,就是没有方法,只有常量的接口,这常量接口模式是对接口的不良使用,因为它没什么卵用还会污染实现类 Java中有几个常量接口,如java.io.ObjectStreamConstants

    53430

    绑定子类的泛型基类,反模式?

    这次总结一个个人认为的反模式:“绑定子类的泛型层基类”,这个模式在一些著名的框架中也见到过,如果CSLA、BlogEngine。我自己在原来的写的框架中,也用到过。    ...基于这个基类的代码重用,使得子类的代码非常简单。这里和普通继承、普通泛型的不同点在于父类在运行时绑定了具体子类的类型。 设计原理     为什么要这样设计?基类为什么不直接使用非泛型的基类呢?...例如上文中的例子,EntityBase 和 EntityBase其实是不同的两个运行时类型。这样,当我在EntityBaseT>内声明的静态字段是绑定到各子类中的。...如: EntityBase a = new Article(); a = new User(); 我甚至都不可能用到抽象的EntityBase类,因为我要使用此类,必须指定具体的子类,但是我如果知道要使用哪个具体的子类...这个问题产生的原因,主要是因为没有一个“与子类无关的抽象”存在。我们可以为EntityBaseT>添加IEntity接口,这样,所有的子类都能转换为IEntity,也就能进行统一的处理。

    1K50
    领券