python - python atom 的透明包装器
问题描述
我想通过包装器对象 st 在 python 中扩展某些原子值的行为,当包装器不知道该做什么时,它会自行解包。包装器应该不知道它的原子,所以任何东西都可以放在里面。
假设以下测试应该通过:
def test_wrapper_object_adds_functionality_on_top_of_int():
wrapper = MagicWrap(2)
assert wrapper+2 == 4
assert wrapper*2 == 4
assert wrapper**2 == 4
assert wrapper.foo() == "bar"
def test_wrapper_object_adds_functionality_on_top_of_str():
wrapper = MagicWrap("foo")
assert wrapper+"2" == "foo2"
assert wrapper*2 == "foofoo"
assert wrapper.foo() == "bar"
上述测试不检查可交换性,所以这是第 2 级:
def test_wrapper_is_commutative_as_int():
wrapper = MagicWrap(2)
assert 2+wrapper == 4
assert 2*wrapper == 4
assert 2**wrapper == 4
assert wrapper.foo() == "bar"
def test_wrapper_is_commutative_as_str():
wrapper = MagicWrap("foo")
assert "2"+wrapper == "2foo"
assert 2*wrapper == "foofoo"
assert wrapper.foo() == "bar"
仅满足 1 级的答案仍然很有趣。
我专门使用python 3。
解决方案
推荐阅读
- javascript - Electron WebAssembly:TypeError:不正确的响应 MIME 类型。预期的“应用程序/wasm”
- angular - 构建 Angular 应用程序时出错
- android - Xamarin Forms 操作栏溢出弹出颜色
- java - Spring boot AOP 忽略使用 @Named 注册的 JAX-RS 资源
- android - Kotlin 对话框 java.lang.IllegalStateException:指定的孩子已经有一个父母。您必须先在孩子的父母上调用 removeView()
- android - Android 分页库 getItem raisesIllegalArgumentException
- c# - 我可以创建一个拥有超过 500 个成员的枚举吗?
- c++ - 使用模板转换运算符的模糊解决方案
- python - 轮渡票务程序 Python
- javascript - React-Redux 组件不反映 Redux Store 中的更改