【发布时间】:2022-01-16 05:25:42
【问题描述】:
我想为str 数据类型创建新方法。这是我尝试过的
class str(str):
def __init__(self) -> None:
super().__init__()
def work(self):
# Just for testing
print("works")
在这里,当我使用 str() 初始化字符串时,这是可行的,但是将它们包裹在简单的引号中会引发错误 AttributeError: 'str' object has no attribute 'work'
像这样:
b = str("Hello world")
b.work()
使用标准输出"works"按预期工作
但是,
a = "Hello world"
a.work()
提高AttributeError: 'str' object has no attribute 'work'
我想创建新方法以便它们适用于这些情况:
"foo".work()
str("foo").work() # <- This actually works :D
bar = "foo"; bar.work()
感谢您的帮助。
【问题讨论】:
-
我会强烈建议不要这样做。也许创建一个新类
Str,它是str的子类,但不要将子类与父类调用相同的东西,因为它只会在阅读代码时导致混乱,你会遇到问题像这样。 -
这部分是拼写问题吗?
self.words而不是self.works? -
Python创建字符串对象的各种方式,比如你的源代码中引用的文字,直接调用
str类的C语言实现——名称“str”不查在此过程中,您绝对无法通过 Python 代码来改变这种行为。 -
不是真的,
words应该在以后使用。我应该编辑帖子以避免混淆。感谢@esramish 的评论。 -
你真的不能。您是否正在尝试解决一些特定的问题?有多种选择,但最好的选择取决于您想做什么。
标签: python python-3.x string