小编Zec*_* Hu的帖子

在 Nim 中实现将tables.keys迭代器作为参数的map & min

我想定义适用于 的mapmin/ max(最​​初在 中定义sequtils)的重载tables.keys。具体来说,我希望能够写出如下内容:

import sequtils, sugar, tables

# A mapping from coordinates (x, y) to values.
var locations = initTable[(int, int), int]()
# Put in some random values.
locations[(1, 2)] = 1
locations[(2, 1)] = 2
locations[(-2, 5)] = 3

# Get the minimum X coordinate.
let minX = locations.keys.map(xy => xy[0]).min
echo minX
Run Code Online (Sandbox Code Playgroud)

现在失败了:

/usercode/in.nim(12, 24) Error: type mismatch: got <iterable[lent (int, int)], proc (xy: GenericParam): untyped>
but expected …
Run Code Online (Sandbox Code Playgroud)

iterator nim-lang

5
推荐指数
1
解决办法
610
查看次数

如何创建一个作为另一个类的子类的 Python 类,但未通过 issubclass 和/或 isinstance 测试?

我知道这可能是糟糕的设计,但我遇到了一种情况,我需要动态创建Derived类的子类,并使实例失败或检查(即 return )。BaseDerivedissubclass(Derived, Base)isinstance(derived_obj, Base)False

我尝试了多种方法,但没有成功:

  • 创建一个名为__class__( Derived/sf/answers/3007060941/ )的属性。这只能用于使支票退回True
  • 重写 的__instancecheck____subclasscheck__方法Base。这不起作用,因为 CPython 仅在常规检查返回时调用这些方法False
  • __class__在 期间分配属性__init__。Python 3.6+ 中不再允许这样做。
  • 创建Derived子类object并将其所有属性和方法(包括特殊方法)分配给Base. 这不起作用,因为某些方法(例如__init__)不能在不是 的子类的实例上调用Base

这可以用 Python 完成吗?该方法可以是特定于解释器的(代码仅在 CPython 中运行),并且只需要针对 Python 版本 3.6+。


为了说明此要求的潜在用途,请考虑以下函数:

def map_structure(fn, obj):
    if isinstance(obj, list):
        return [map_structure(fn, x) for x in obj]
    if isinstance(obj, dict):
        return …
Run Code Online (Sandbox Code Playgroud)

python

2
推荐指数
1
解决办法
537
查看次数

标签 统计

iterator ×1

nim-lang ×1

python ×1