Python class 中的嵌套函数
Nested function in Python class
我有一点“基本理解”Python问题。
那么让我解释一下我的问题。
一开始是一个非常简单的代码片段。
class Revert:
__sentence = ""
def __init__(self, sentence: str):
self.__sentence = sentence
def get_sentence(self):
return self.__sentence
def revert_sentence(self):
return self.__sentence[::-1]
if __name__ == '__main__':
print(Revert("Whosebug").get_sentence())
print(Revert("Whosebug").revert_sentence())
所以这显示了 python 函数的正常函数调用。
但是我怎样才能转换这段代码,这样我就可以像这样调用恢复函数:
print(Revert("Whosebug").get_sentence().revert_sentence())
也许我是隔着树林想念森林。但我不知道如何做到这一点。
我已经尝试用 innermethods
解决问题,但这对我不起作用
...
def get_sentence(self):
def revert_sentence():
self.revert_sentence()
return self.__sentence
...
非常感谢
实现 __str__
到 return 实际字符串。然后在现有方法中,return 对象。这样你就可以连锁了。但是当 print
应用于它时,该 __str__
方法将启动:
class Revert:
__sentence = ""
def __init__(self, sentence: str):
self.__sentence = sentence
def get_sentence(self):
return self
def revert_sentence(self):
return Revert(self.__sentence[::-1])
# Some more such methods ...
def upper(self):
return Revert(self.__sentence.upper())
def first(self, count):
return Revert(self.__sentence[:count])
def dotted(self):
return Revert(".".join(self.__sentence))
# For getting a string
def __str__(self):
return self.__sentence
print(Revert("Whosebug").get_sentence().revert_sentence())
print(Revert("Whosebug")
.revert_sentence()
.first(8)
.upper()
.revert_sentence()
.first(4)
.dotted()) # "O.V.E.R"
请注意,现在 .get_sentence()
方法的作用并不大,您可以随时将其从链条上剥离。
给你:
class Revert:
__sentence = ""
def __init__(self, sentence: str):
self.__sentence = sentence
def get_sentence(self):
return self.__sentence
def revert_sentence(self):
# It's important to know that you are making changes in the same instance of the object
self.__sentence = self.__sentence[::-1]
return self
def pseudo_revert(self):
# Return a new object with reverted string, but this instance still has original string intact.
return Revert(self.__sentence[::-1])
if __name__ == '__main__':
r1 = Revert("Whosebug")
r2 = Revert("Whosebug")
print(r1.get_sentence()) # Whosebug
print(r1.revert_sentence().get_sentence()) # wolfrevokcatS
print(r1.get_sentence()) # wolfrevokcatS
print(r2.get_sentence()) # Whosebug
print(r2.pseudo_revert().get_sentence()) # wolfrevokcatS
print(r2.get_sentence()) # Whosebug
希望这可以帮助您清楚地理解对象、对象的实例和对象的方法。
我有一点“基本理解”Python问题。
那么让我解释一下我的问题。
一开始是一个非常简单的代码片段。
class Revert:
__sentence = ""
def __init__(self, sentence: str):
self.__sentence = sentence
def get_sentence(self):
return self.__sentence
def revert_sentence(self):
return self.__sentence[::-1]
if __name__ == '__main__':
print(Revert("Whosebug").get_sentence())
print(Revert("Whosebug").revert_sentence())
所以这显示了 python 函数的正常函数调用。 但是我怎样才能转换这段代码,这样我就可以像这样调用恢复函数:
print(Revert("Whosebug").get_sentence().revert_sentence())
也许我是隔着树林想念森林。但我不知道如何做到这一点。
我已经尝试用 innermethods
解决问题,但这对我不起作用
...
def get_sentence(self):
def revert_sentence():
self.revert_sentence()
return self.__sentence
...
非常感谢
实现 __str__
到 return 实际字符串。然后在现有方法中,return 对象。这样你就可以连锁了。但是当 print
应用于它时,该 __str__
方法将启动:
class Revert:
__sentence = ""
def __init__(self, sentence: str):
self.__sentence = sentence
def get_sentence(self):
return self
def revert_sentence(self):
return Revert(self.__sentence[::-1])
# Some more such methods ...
def upper(self):
return Revert(self.__sentence.upper())
def first(self, count):
return Revert(self.__sentence[:count])
def dotted(self):
return Revert(".".join(self.__sentence))
# For getting a string
def __str__(self):
return self.__sentence
print(Revert("Whosebug").get_sentence().revert_sentence())
print(Revert("Whosebug")
.revert_sentence()
.first(8)
.upper()
.revert_sentence()
.first(4)
.dotted()) # "O.V.E.R"
请注意,现在 .get_sentence()
方法的作用并不大,您可以随时将其从链条上剥离。
给你:
class Revert:
__sentence = ""
def __init__(self, sentence: str):
self.__sentence = sentence
def get_sentence(self):
return self.__sentence
def revert_sentence(self):
# It's important to know that you are making changes in the same instance of the object
self.__sentence = self.__sentence[::-1]
return self
def pseudo_revert(self):
# Return a new object with reverted string, but this instance still has original string intact.
return Revert(self.__sentence[::-1])
if __name__ == '__main__':
r1 = Revert("Whosebug")
r2 = Revert("Whosebug")
print(r1.get_sentence()) # Whosebug
print(r1.revert_sentence().get_sentence()) # wolfrevokcatS
print(r1.get_sentence()) # wolfrevokcatS
print(r2.get_sentence()) # Whosebug
print(r2.pseudo_revert().get_sentence()) # wolfrevokcatS
print(r2.get_sentence()) # Whosebug
希望这可以帮助您清楚地理解对象、对象的实例和对象的方法。