Python`str`子类未调用`__add__`

时间:2018-09-19 19:12:19

标签: python string oop python-3.6

我有一个扩展python str类的类,其基本编码如下:

class MyString(str):
    @staticmethod
    def str_wrap(method):
        def __internal__(*args, **kwargs):
            return_value = method(*args, **kwargs)
            print(method.__name__, type(return_value), *args, **kwargs)
            if type(return_value) is str:
                return MyString(return_value)
            return return_value
        return __internal__

    def __getattribute__(self, item):
        return_value = super().__getattribute__(item)
        if type(return_value) is str and item != "to_string":
             return MyString(return_value)
        if callable(return_value) and item not in ["to_string", "str_wrap"]:
            return self.str_wrap(return_value)
        return return_value

    def to_string(self):
        return str(self)

在我的应用程序中,我有一行代码如下,new_str = (old_str + "." + os.path.sep),其中old_str的类型为MyString。我遇到的问题是new_str的类型是str。在我的str_wrap函数中,我放置了代码以跟踪正在通过它的方法,并且我注意到__add__从未出现在其中。为什么添加字符串不通过__add__调用__getattribute__?我在做错什么吗?

0 个答案:

没有答案