Monkey 补丁以添加功能 [Python]

问题描述 投票:0回答:1

在python中,我有一些常用的字符串实用函数。这些包括内置方法的扩展(例如支持普通字符串和正则表达式的拆分函数),内置方法的辅助函数(例如带有参数的剥离函数,而不是三个内置的 -在功能中)和全新的功能。

我目前以独立函数的形式拥有它们,像这样:

function strip(s, left: bool = True, right: bool = True):
if left and right:
    return s.strip()
elif left:
    return s.lstrip()
elif right:
    return s.rstrip()
else:
    return s

但是,这不是很方便。内置方法是

str
类的成员,因此使用点运算符调用它们。
mystring.strip()
strip(mystring)
更简洁方便。此外,前者与内置方法一致。

为了解决这个问题,我想使用猴子补丁。 Monkey 修补是您从类外部将自己的方法添加到类中的地方:

str.mystrip = strip

这允许以

mystring.mystrip()
的形式调用新函数。

然而,猴子补丁通常被认为是不好的做法。

那么,可以用我的自定义函数给

str
类打补丁吗?或者这是不好的做法?有更好的方法吗?

python python-3.x string class monkeypatching
1个回答
0
投票

从技术上讲,另一种方式更简洁(少一个句号!)

除此之外,最好的方法可能是子类化 str 类。 您可以获得 str 的所有功能以及您想要添加的任何新功能。你可以在这里看到一些信息:https://realpython.com/inherit-python-str/#extending-the-strings-standard-behavior

他们的一个例子是:

class WordCountString(str):
    def words(self, separator=None):
        return len(self.split(separator))

可以看到WordCountString继承了str。然后他们定义了一个与新类型一起使用的新函数。

© www.soinside.com 2019 - 2024. All rights reserved.