Python中的Self语法错误:无效语法,字符串';什么是不可抗拒的属性?

Python中的Self语法错误:无效语法,字符串';什么是不可抗拒的属性?,python,python-3.x,syntax-error,self,Python,Python 3.x,Syntax Error,Self,我这里有点小问题;如何在Python中进行自我论证?我希望能够创建这样的函数: 'Hello, World!'.Write() 或者至少是类似的东西。这是我目前的代码: def Write(self): print(self) 'Hello, World!'.Write() 我把它作为一种语法: File "main.py", line 3, in <module> 'Hello, World!'.Write() AttributeError:

我这里有点小问题;如何在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...

有些东西肯定不管用。我错过了一步还是几步?有什么我没看见的吗?我甚至应该使用
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中定义的类,而不是像
str
这样的内置类,那么您可以尝试在以下位置对方法进行monkey修补:

class MyType:
    def __init__(self, value):
        self.value = value
要对类进行monkey修补,以便所有实例都能看到该方法,请执行以下操作:

MyType.write = write
MyType('Hello World!').write()
要仅对单个实例进行monkey patch,请执行以下操作:

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

“某些东西肯定不起作用。我是否错过了一个或几个步骤?”-是的,您似乎根本没有阅读任何有关Python工作原理的文档<代码>自我并不像你想象的那样做。如果您试图根据使用另一种语言(可能是Ruby?)的经验来猜测Python是如何工作的,那么您可能会遇到问题。如果你只是在编语法,也是一样的。按照贾斯汀的建议完成教程。至少,略读一下。尽管不推荐,但要通读一遍
s = MyType('Hello World!')
s.write()