如何将函数适当化为 class in Python

How to appropriate a function into a class in Python

我是编程新手。在 Coursera 中,我学会了编写一个脚本来判断一个句子是否为回文。但它没有 class。我需要将此功能与 class 和 self:

def is_palindrome(input_string):

new_string = ""
reverse_string = ""

for letter in input_string:
     
    if not letter == " ":
        new_string = letter + new_string
        reverse_string = reverse_string + letter

if reverse_string.lower() == new_string.lower():
    return True
return False

print(is_palindrome("Never Odd or Even"))
print(is_palindrome("abc"))
print(is_palindrome("kayak"))

但是当我尝试做这样的事情时:

class cis_palindrome:
  def is_palindrome(self, string):
    self.string = string

    new_string = ""
    reverse_string = ""

    for letter in string:
        
        if not letter == " ":
            new_string = letter + new_string
            reverse_string = reverse_string + letter

    if reverse_string.lower() == new_string.lower():
        return True

print(is_palindrome("Never Odd or Even"))
print(is_palindrome("abc"))
print(is_palindrome("kayak"))

没用。我真的试图理解 self 和 init 的概念,但问题是我找不到任何将 self 替换为之前未分配的字符串并打印的示例使用新的输入,就像在这些打印示例中一样。

您需要初始化 class 才能使用它的方法(在您的例子中,是 is_palindrome 方法)。

class cis_palindrome:

  def __init__(self, ...):
    # Your init

  def is_palindrome(self, string):
    # Your algorithm

# Initialization of the cis_palindrome class
pal = cis_palindrome()

# Call the is_palindrome method
result = pal.is_palindrome("kayak")
print(result)

您的问题不是 self__init__,而是您只是以错误的方式使用了 class。

首先你必须创建 class

的实例
instance = cis_palindrome()

以后再用

print( instance.is_palindrome(...) )

最终你可以在一行中完成 - 但当你只需要使用它一次时这会很有用

print( cis_palindrome().is_palindrome(...) )

完整的工作代码:

你不用 self.string 所以我删除了它。

对于 classes 使用 CamelCaseNames 是一个很好的规则 - 它有助于识别代码中的 class。

class CisPalindrome:   # PEP8: `CamelCaseNames` for classes

  def is_palindrome(self, string):
    
    new_string = ""
    reverse_string = ""

    for letter in string:
        
        if not letter == " ":
            new_string = letter + new_string
            reverse_string = reverse_string + letter

    if reverse_string.lower() == new_string.lower():
        return True

instance = CisPalindrome()

print(instance.is_palindrome("Never Odd or Even"))
print(instance.is_palindrome("abc"))
print(instance.is_palindrome("kayak"))

PEP 8 -- Style Guide for Python Code


编辑:

如果你想使用self__init__那么你可以

class CisPalindrome:
    
    def __init__(self, string):
        self.string = string
        
    def is_palindrome(self):

        new_string = ""
        reverse_string = ""

        for letter in self.string:
            if not letter == " ":
                new_string = letter + new_string
                reverse_string = reverse_string + letter

        if reverse_string.lower() == new_string.lower():
            return True

print(CisPalindrome("Never Odd or Even").is_palindrome())
print(CisPalindrome("abc").is_palindrome())
print(CisPalindrome("kayak").is_palindrome())

顺便说一句:

    if reverse_string.lower() == new_string.lower():
        return True

你可以减少到

    return reverse_string.lower() == new_string.lower()

因为 == 给出 TrueFalse