【问题标题】:Calling class method within class error在类错误中调用类方法
【发布时间】:2017-10-24 21:56:25
【问题描述】:
class String(object):
    def __init__(self, text):
        self.text = text

    def __repr__(self):
        return "{}".format(self.text)

    def reverse(self):
        return self.text[::-1]

    def isPalindrome(self):
        return (self.reverse(self.text) == self.text)


def main():
    string = String(input("Write a String: "))

    if(string.isPalindrome()):
        print("The string {{}} IS a Palindrome".format(string))
    else:
        print("The string {{}} is NOT Palindrome".format(string))

我有一个代表String 的类,我想通过调用isPalindrome 方法来检查一个对象是否为回文。但是当我打电话给string.isPalindrome 时,我得到了这个错误:

Traceback (most recent call last):
  File "palindrome.py", line 23, in <module>
    main()
  File "palindrome.py", line 17, in main
    if(string.isPalindrome()):
  File "palindrome.py", line 12, in isPalindrome
    return (self.reverse(self.text) == self.text)
TypeError: reverse() takes 1 positional argument but 2 were given

【问题讨论】:

  • 这个异常很清楚你的错误在哪里:TypeError: reverse() takes 1 positional argument but 2 were given
  • 每当您从实例调用方法时,self 是一个隐含的参数。例如,在obj.reverse() 中,obj 在方法内自动变为self

标签: python python-3.x class oop


【解决方案1】:

错误来自这一行:

return (self.reverse(self.text) == self.text)

为此改变它:

return (self.reverse() == self.text)

self 可能真的很混乱,这里有一个非常好的article 来了解它是如何工作的。让你明白,看reverse()定义:

def reverse(self):
    return self.text[::-1]

如您所见,self.text 已分配。调用时无需将其传递给函数。

【讨论】:

  • 没问题,如果有帮助请采纳。
  • 我在等待时间限制:)
  • @ViniciusBarbosa 没问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多