首页 > 解决方案 > 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吗?

标签: pythonpython-3.xsyntax-errorself

解决方案


在正常情况下,您不能向现有的内置对象添加方法。相反,简单的方法是编写一个接受您要操作的对象的函数:

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()

推荐阅读