gpt4 book ai didi

python - 如何在 Python 中对 str 进行子类化

转载 作者:IT老高 更新时间:2023-10-28 22:20:13 25 4
gpt4 key购买 nike

我正在尝试对 str 对象进行子类化,并为其添加几个方法。我的主要目的是学习如何去做。我被困的地方是,我应该在元类中对字符串进行子类化,并使用该元类创建我的类,还是直接创建子类 str?

而且,我想我需要以某种方式实现 __new__(),因为我的自定义方法将修改我的字符串对象,并返回新的 mystr obj。

我的类的方法,应该完全可以与 str 方法链接,并且当自定义方法修改它时,应该总是返回一个新的我的类实例。我希望能够做这样的事情:

a = mystr("something")
b = a.lower().mycustommethod().myothercustommethod().capitalize()
issubclass(b,mystr) # True

我想拥有 str 拥有的所有能力。例如, a = mystr("something") 那么我想像这样使用它, a.capitalize().mycustommethod().lower()

据我了解,我需要实现 __new__()。我认为是因为,字符串方法可能会尝试创建新的 str 实例。所以,如果我覆盖 __new__(),他们应该会返回我的自定义 str 类。但是,在这种情况下,我不知道如何将参数传递给自定义类的 __init__() 方法。而且我想我需要使用 type() 才能在 __new__() 方法中创建一个新实例,对吧?

最佳答案

如果您想在构造时修改字符串,则覆盖 __new__() 有效:

class caps(str):
def __new__(cls, content):
return str.__new__(cls, content.upper())

但如果你只是想添加新方法,你甚至不必接触构造函数:

class text(str):
def duplicate(self):
return text(self + self)

请注意,继承的方法,例如 upper() 仍将返回正常的 str,而不是 text

关于python - 如何在 Python 中对 str 进行子类化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7255655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com