如何将函数适当化为 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()
因为 ==
给出 True
或 False
我是编程新手。在 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()
因为 ==
给出 True
或 False