Python 为什么我不能连接';str';和';实例';类中的对象?
上面是我正在构建的代码的过度简化版本,用于从网页中提取数据。我像这样运行temp.py代码Python 为什么我不能连接';str';和';实例';类中的对象?,python,string,class,instance,init,Python,String,Class,Instance,Init,上面是我正在构建的代码的过度简化版本,用于从网页中提取数据。我像这样运行temp.py代码 class myClass: def __init__(self, text): self.text = text def printText(text): more_text = "Why so " return more_text + text 但是我得到 class myClass: def _
class myClass:
def __init__(self, text):
self.text = text
def printText(text):
more_text = "Why so "
return more_text + text
但是我得到
class myClass:
def __init__(self, str(text)):
self.text = text
def printText(text):
more_text = "Why so "
return more_text + text
但是我得到
class myClass:
def __init__(self, text):
self.text = str(text)
def printText(text):
more_text = "Why so "
return more_text + text
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“temp.py”,第9行,打印文本
返回更多文本+文本
TypeError:无法连接'str'和'instance'对象
有人能给我一个解决这个问题的好办法吗?请注意,在我的原始代码中,我的意图是连接类中的两个字符串对象以创建网页链接。任何建议都将不胜感激。您面临的主要问题是:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "temp.py", line 9, in printText
return more_text + text
TypeError: cannot concatenate 'str' and 'instance' objects
出现此错误的原因是,作为实例方法,声明希望您将self
(实例对象)作为第一个参数传递。您现在正在传递用作self(实例)的文本。这就是为什么会出现错误的原因,因为最终您实际要做的是尝试添加带有实例的字符串
因此,知道隐式传递给printText
的第一个参数就是实例,并且查看方法内部,实际上您希望在printText
方法内部引用self.text
。但是,传递到printText
的实例实际上被称为text
。这可能非常令人困惑
因此,按照建议的命名法,您应该将实例参数命名为“预期的”,self
记住这一点,您想要引用的文本
现在可以被引用为self.text
这可以通过修复代码来显示:
def printText(text):
您面临的主要问题是:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "temp.py", line 9, in printText
return more_text + text
TypeError: cannot concatenate 'str' and 'instance' objects
出现此错误的原因是,作为实例方法,声明希望您将self
(实例对象)作为第一个参数传递。您现在正在传递用作self(实例)的文本。这就是为什么会出现错误的原因,因为最终您实际要做的是尝试添加带有实例的字符串
因此,知道隐式传递给printText
的第一个参数就是实例,并且查看方法内部,实际上您希望在printText
方法内部引用self.text
。但是,传递到printText
的实例实际上被称为text
。这可能非常令人困惑
因此,按照建议的命名法,您应该将实例参数命名为“预期的”,self
记住这一点,您想要引用的文本
现在可以被引用为self.text
这可以通过修复代码来显示:
def printText(text):
这里有几个问题:
在为对象创建的每个函数中,self
必须包含为第一个参数
使用第二个示例:
def printText(self):
more_text = "Why so "
return more_text + self.text
然后,创建类的实例,并可以访问函数printText
:
class myClass:
def __init__(self, text):
self.text = str(text)
def printText(self, text):
more_text = "Why so "
return more_text + text
如果要使用与初始化文本相同的文本,则需要将其作为类的属性引用,而不是作为新参数text
,如下所示:
joker = myClass("This is some text")
print(joker.text) # This prints: "This is some text"
print(joker.printText("serious?")) # This prints "Why so serious?"
然后,如果要参考上述内容:
class myClass:
def __init__(self, text):
self.text = str(text)
def printText(self):
more_text = "Why so "
return more_text + self.text
这里有几个问题:
在为对象创建的每个函数中,self
必须包含为第一个参数
使用第二个示例:
def printText(self):
more_text = "Why so "
return more_text + self.text
然后,创建类的实例,并可以访问函数printText
:
class myClass:
def __init__(self, text):
self.text = str(text)
def printText(self, text):
more_text = "Why so "
return more_text + text
如果要使用与初始化文本相同的文本,则需要将其作为类的属性引用,而不是作为新参数text
,如下所示:
joker = myClass("This is some text")
print(joker.text) # This prints: "This is some text"
print(joker.printText("serious?")) # This prints "Why so serious?"
然后,如果要参考上述内容:
class myClass:
def __init__(self, text):
self.text = str(text)
def printText(self):
more_text = "Why so "
return more_text + self.text
由于printText
中的text
是方法的第一个参数,因此它是*隐式传递给实例的,因此它将不起作用。由于printText
中的text
是方法的第一个参数,因此它*隐式传递给实例,因此它将不起作用。注意,OP正在使用print joker\u says.printText()
,因此将抛出TypeError
,因为它将缺少一个参数...@juanpa.arrivillaga Shoot。你让我意识到真正的问题是什么。谢谢你提出来。@juanpa.arrivillaga谢谢。我修复了它。注意,OP正在使用print joker\u says.printText()
,因此将抛出TypeError
,因为它将缺少一个参数...@juanpa.arrivillaga Shoot。你让我意识到真正的问题是什么。谢谢你提出来。@juanpa.arrivillaga谢谢。我修好了,谢谢!我想我明白了。然而,我认为正如你所指出的,def printText中应该有一个self,而不是text。这样printData就不会寻找两个输入。我感谢你的迅速反应!谢谢我想我明白了。然而,我认为正如你所指出的,def printText中应该有一个self,而不是text。这样printData就不会寻找两个输入。我感谢你的迅速反应!