我有一个扩展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__
?我在做错什么吗?