首页 > 解决方案 > 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。

标签: pythonoopobject

解决方案


推荐阅读