python原子的透明包装器

2024-10-03 11:15:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过包装器对象s.t扩展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"

一个仅仅满足一级要求的答案仍然是有趣的

我专门使用python3


Tags: oftestobjectfooontopdefbar