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