Self in Python Syntax Error: Invalid Syntax, String's Attributes Inexisting?

Self in Python Syntax Error: Invalid Syntax, String's Attributes Inexisting?

我这里有个小问题;我如何在 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 吗?

我认为这是一个非常复杂的解决方案,需要 Python 的扩展技能。但这是可能的。

class EnhancedString(object):
     def __init__(self, *args, **kwargs):
         self.s = str(*args, **kwargs)

     def Write(self):
         print(self.s);

mystring = EnhancedString('Hello, World!')
mystring.Write()

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

def write(self):
    print(self)

您可以随意调用参数,包括 self。现在你可以这样称呼它:

write('Hello World!')

如果您正在处理 Python 中定义的 classes 而不是像 str 这样的内置函数,您可以尝试直接在

中对您的方法进行猴子修补
class MyType:
    def __init__(self, value):
        self.value = value

猴子修补class,所以所有实例都看到方法:

MyType.write = write
MyType('Hello World!').write()

只对单个实例进行猴子修补:

instance = MyType('Hello World!')
instance.write = write.__get__(instance)
instance.write()

综上所述,用新功能修改现有 classes 的正确方法是 subclass。您可以使用您认为合适的任何功能自由扩展 str

class MyType(str):
    def write(self):
        print(self)

唯一与您的示例不同的是您的 class 并不特殊,不能再从文字中初始化。在所有其他方面,它的行为类似于具有 write 方法的字符串:

s = MyType('Hello World!')
s.write()