duck-typing相关内容
我对这两个术语有点困惑,以下是我所知道的: 多态性是指不同类型的对象由一个通用接口处理的能力.而鸭子类型,是一种动态类型,允许不同类型的对象响应相同的方法. 据我了解,多态更多的是创建一个可以在不同类之间共享的接口.鸭子类型是关于松散类型,只要在消息的接收者上找到方法,就可以调用方法. 这是正确的吗?我对这两个很困惑,他们似乎有关系,但我不知道他们的关系是什么.提前非常感谢!
..
注意这不是关于如何在 C# 中实现或模拟鸭子类型的问题... 多年来,我的印象是某些 C# 语言特性依赖于语言本身定义的数据结构(在我看来,这总是一种奇怪的鸡与蛋的场景).例如,我的印象是 foreach 循环只能用于实现 IEnumerable 的类型. 从那以后我开始明白 C# 编译器使用鸭子类型来确定一个对象是否可以在 foreach 循环中使用,寻找 GetEnumerator
..
假设我在 F# 中定义了以下两种类型: type Dog = { DogName:string;年龄:int }类型猫 = { 猫名:字符串;年龄:int } 我期待以下方法对猫和狗都有效: 让 isOld x = x.Age >= 65 实际上,似乎发生的是 isOld 只接受猫: let dog = { DogName = "Jackie";年龄 = 4 }让 cat = { Cat
..
我可以在声明成员时指定接口吗? 在思考这个问题一段时间后,我突然想到静态鸭子类型的语言可能真的有效.为什么不能在编译时将预定义的类绑定到接口?示例: 公共接口 IMyInterface{public void MyMethod();}public class MyClass//没有显式实现IMyInterface{public void MyMethod()//但包含一个兼容的方法定义{C
..
我想在 C# 中使用动态对象创建一个简单的鸭子类型示例.在我看来,动态对象应该具有 HasValue/HasProperty/HasMethod 方法,并在尝试针对它运行之前为您正在寻找的值、属性或方法的名称提供单个字符串参数.我试图避免 try/catch 块,并尽可能地进行更深入的反思.在动态语言(JS、Ruby、Python 等)中,鸭子类型似乎是一种常见的做法,即在尝试使用属性/方法之前测
..
问题: 有没有办法用 Delphi 2007 做鸭子输入(即没有泛型和高级 Rtti 功能)? Delphi 2010 以后的鸭子打字资源: Duck Duck Delphi 由 ARCANA. Delphi 中的鸭子打字 作者 Daniele Teti. AOP 和 Delphi 中的鸭子输入 来自 Stefan Glienke. 上次编辑: 我深入研究了上面列
..
如果我想使用 argparse.ArgumentParser() 的结果,它是一个 Namespace 对象,方法需要一个字典或类似映射的对象(参见 collections.Mapping),正确的做法是什么它吗? C:\>pythonPython 2.7.3(默认,2012 年 4 月 10 日,23:31:26)[MSC v.1500 32 位(英特尔)] on win32输入“帮助"、“版
..
对于下面的代码, interface SquareConfig{颜色?:字符串;宽度?:数量;}界面广场{颜色:字符串;地区:数量;}函数 createSquare(config: SquareConfig): Square {让 newSquare:Square = {color: "white", area: 100};如果(配置颜色){newSquare.color = config.co
..
看起来在 TypeScript 中(从编译器的角度来看)拥有这样的代码绝对没问题: class Vehicle {public run(): void { console.log('Vehicle.run');}}类任务{public run(): void { console.log('Task.run');}}函数运行任务(t:任务){t.run();}运行任务(新任务());运行任务(新车
..
当数据类中有一个字段的类型可以是任何类型时,如何省略注解? @dataclass班级最爱:收藏编号:int = 80085fav_duck = object()fav_word: str = '土豆' 似乎上面的代码实际上并没有为 fav_duck 创建一个字段.它只是使它成为一个普通的旧类属性. >>>收藏夹()收藏夹(fav_number=80085, fav_word='土豆')>>>
..
有没有办法可以注释函数以确保传递给函数的对象具有特定的方法或属性,但我不关心它的实际类型? Pycharm 在内部使用类似于 {b} 的语法来指示它推断出的对象需要哪些方法/属性,但这似乎不是有效的 Python 语法: def func(a: {b}): # 错误a.b = 1 有没有办法让类型检查器帮助鸭子打字,我只关心对象有什么方法/属性,而不关心对象的类型是什么,我不能修改我想要
..
如果我想使用 argparse.ArgumentParser()的结果(这是一个 Namespace 对象),并使用需要字典或类似映射的对象的方法(参见 collections.Mapping ),什么是正确的方法它吗? C:\> pythonPython 2.7.3(默认值,2012年4月10日,23:31:26)[Win v.1500 v 32 bit(Intel)]32键入“帮助",“版
..
我看到很多人在说“评估是邪恶的/危险/不安全" ,因为一个人可以做以下事情: eval("os.system('rm -rf/')") 在其他帖子中,pythoner被视为"同意成年人",您不会由于python的鸭式输入样式为鸭式,因此不必进行类型检查. 然后执行以下代码: def foo(duck):duck.quack()EvilDuck类(对象):def quack(自己)
..
关于模板和鸭子输入之间的关系,有一个更早的问题(8年前!): 不是真的. 如果我们接受模板已经在编译时输入鸭子 我不同意链接问题和Wikipedia页面上的已接受答案,因为在编译时而不是运行时执行同一件事并不是说服力的理由完全不同的名称.例如,请参见静态多态性与动态多态性. 然后这些概念显然不比模板更像鸭子 这里的另一个论点是,鸭子类型通常假定您通过尝试使用类型来表达类型
..
对于由模板参数指定的类型,C ++具有某种形式的鸭子类型.我们不知道 DUCK1 和 DUCK2 是什么类型,但是只要它们可以 quack(),它将编译并运行: 模板void let_them_quack(DUCK1 *唐纳德,DUCK2 *雏菊){唐纳德> quack();雏菊-> quack();} 但是写起来有点不方便.当我完全不在乎 DUCK1 和 D
..
这是此帖子的后续内容. 我根据在此处发布的接受的答案完善了我的要求. 我的* .dpr文件: program DuckD11; {$APPTYPE CONSOLE} uses SysUtils, uDuckTyping in 'uDuckTyping.pas', uBirds in 'uBirds.pas'; procedure DoSomething(AObj
..
我正在尝试创建一个通用类来表达一个值具有上下限,并强制执行这些上限. from typing import Any, Optional, TypeVar T = TypeVar("T") class Bounded(object): def __init__(self, minValue: T, maxValue: T) -> None: assert minVa
..
所以我注意到ColdFusion对于条件'00' == '.0'返回true. 在CF 9.1和CF 10中可以重现. 我可以通过添加find('.', foo)条件来轻松解决此问题,但这是不正常的. 像这样的事情使我怀疑ColdFusion.这让我想知道为什么在这种明显错误的条件下它会返回true,它还认为其他什么值相等? 是否存在无法在Coldfusion中进行比较的值列表?还
..
我在一个Java程序员团队中工作.我的一位同事不时建议我做类似“仅添加类型字段"(通常是“字符串类型")之类的事情.否则代码将被装载"if (foo instanceof Foo){...} else if( foo instanceof Bar){...}". 尽管有乔什·布洛赫(Josh Bloch)的告诫,“标记类是对适当的类层次结构的完全模仿",但是我对这种事情的单向反应是什么?然后
..
我最近升级到numpy 1.9dev. (用于改进的OpenBlas支持). 我有一些执行x-y的代码 其中x和y是来自概率分布的样本. 如果分布是伯努利,则它们是布尔值. 如果分布是高斯分布,则它们是浮点数. 取决于在x和y之后的路径 可能是布尔值或浮点数. 我不必在乎,因为python具有鸭嘴式的功能. 如果可以减去,则它是x和y 的有效值 我收到此警告: Depreca
..