Python中的Self语法错误:无效语法,字符串';什么是不可抗拒的属性?
我这里有点小问题;如何在Python中进行自我论证?我希望能够创建这样的函数: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:
'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()