类型错误的函数与字符串参数

问题描述:

我想创建一个简单的函数,允许我返回一个字符串反转。但是,当我打电话功能,错误类型错误的函数与字符串参数

TypeError: reverseString() takes 1 positional argument but 2 were given 

出现。我更熟悉Java,并且想知道问题是什么,如果在Python中传递字符串参数是相同的。

Class myString() 

     def reverseString(string): 
       return string[:,:,-1] 

    p = myString() 
    p.reversedString('Eric') 
+5

这是功能*居然在一个类定义的方法*?你在某个类的实例上调用这个方法吗?您需要提供调用代码,至少*。 –

+3

欢迎来到StackOverflow。请阅读并遵守帮助文档中的发布准则。 [最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)适用于此处。在发布您的MCVE代码并准确描述问题之前,我们无法为您提供有效的帮助。 我们应该能够将发布的代码粘贴到文本文件中,并重现您描述的问题。 – Prune

+3

[Python不是Java](http://dirtsimple.org/2004/12/python-is-not-java.html),你不需要在类中包装所有东西。此外它是区分大小写的,所以你发布的内容实际上并不工作。但是如果你确实想把它作为一个类的一个方法(而不是一个函数,这会更简单),它需要“自我”论证。我建议运行一个教程:https://sopython.com/wiki/What_tutorial_should_I_read%3F – jonrsharpe

的Python需要方法的特别第一参数给它传递的实例,该方法被称为上。你可以使用几乎任何有效的变量名称,但它是一个Python约定,使用self,它会让你的代码更容易让其他人阅读。

class myString:  
    def reverseString(self, string): 
     return string[::-1] 

p = myString() 
print(p.reverseString('Eric')) 

要访问实例变量,你可以使用self.var - 你不能只是做var像Java中。

而且,@jonrshape在评论中指出的那样,你不需要包装在一个类函数:

def reverseString(string): 
    return string[::-1] 

print(reverseString('Eric')) 
+0

不,这绝对不是'@ classmethod'的用处。这不好的坏建议。特别是对于从Java到Python的人。 –

+2

@ juanpa.arrivillaga有效的点。更新。 – anonymoose

+1

还有一件事,'this'和'self'的工作方式完全不同。 'self'在Python中不是关键字,事实上,只要它是函数定义的第一个参数,就可以使用*任何你想要的名称。另外,大多数情况下,您可以在Java中省略this,因为实例变量是在类定义中声明的。 Python没有变量声明。您需要明确使用'self.whatever'作为实例属性。 Python中的实例属性可以用任何方法创建。 –