python - Python中的Self语法错误:无效的语法,字符串的属性不存在?
问题描述
我这里有个小问题;如何在 Python 中进行自我论证?我希望能够创建一个像这样工作的函数:
'Hello, World!'.Write()
或者至少是类似的东西。到目前为止,这是我的代码:
def Write(self):
print(self)
'Hello, World!'.Write()
我把它当作语法:
File "main.py", line 3, in <module>
'Hello, World!'.Write()
AttributeError: 'str' object has no attribute 'Write'
python3 exited with code 1...
所以我尝试将最后一行Write.'Hello, World!'()
改为。现在我有另一个错误:
File "main.py", line 3
Write.'Hello, world!'()
^
SyntaxError: invalid syntax
python3 exited with code 1...
肯定有什么东西不行。我错过了一步还是几步?有什么我没有看到的吗?我什至应该使用self
吗?
解决方案
在正常情况下,您不能向现有的内置对象添加方法。相反,简单的方法是编写一个接受您要操作的对象的函数:
def write(self):
print(self)
您可以随意调用参数,包括self
. 现在你可以这样称呼它:
write('Hello World!')
如果您正在处理在 Python 中定义的类而不是内置的 like str
,您可以尝试在以下位置对您的方法进行猴子修补:
class MyType:
def __init__(self, value):
self.value = value
对类进行猴子补丁,所以所有实例都可以看到该方法:
MyType.write = write
MyType('Hello World!').write()
只对单个实例进行猴子补丁:
instance = MyType('Hello World!')
instance.write = write.__get__(instance)
instance.write()
话虽如此,使用新功能修改现有类的正确方法是子类化。您可以自由扩展str
您认为合适的任何功能:
class MyType(str):
def write(self):
print(self)
与您的示例唯一不同的是您的类不是特殊的,并且不能再从文字初始化。在所有其他方面,它的行为就像带有write
方法的字符串:
s = MyType('Hello World!')
s.write()
推荐阅读
- powershell - Select-Object -First 影响管道中的先前 cmdlet
- visual-studio - 在 NetCore 中发布 DLL 文件 FTP
- javascript - 使所有清除按钮在计算器上工作
- python - 将 Pd 数据帧转换为 2 模式/二分网络图
- postgresql - 具有多个模式和用户的连接池 Postgres
- javascript - JS POST AJAX 的一种通用功能
- c# - 从 C# 在 Github 服务器中创建新的 repo
- javascript - 运行“npm start”时出现循环错误?
- oracle - PLSQL LS-00382:表达式类型错误
- python - 如何在python中快速循环矩阵计算