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
    

希望这可以帮助您清楚地理解对象、对象的实例和对象的方法。