python - 如何判断最后一个函数是否在类: Python中被调用

标签 python function call

我有一个类似于以下内容的 Python 类:

class BuildSentence(object):

    def __init__(self, intro):
        self.sentence = intro

    def name(self, na):
        self.sentence += "; my name is %s" % (na)

    def surname(self, su):
        self.sentence += "; my surname is %s" % (su)

    def age(self, ag):
        self.sentence += "; I am %d years old" % (ag)

    def final_sentence(self):
        self.sentence += "."
        return do_something_with(self.sentence)

我希望在所有必需的函数完成时自动调用final_sentence'函数。 'final_sentence' 函数不一定返回字符串,它可能是整数或列表。我不确定是否可以识别最后调用的函数?

例如:

s = BuildSentence("Hello")
answer = s.name("Foo").age(40)

应该“do_something_with”:

Hello; my is Foo; I am 40 years old.

最佳答案

您可以使用__str__方法,每当需要字符串时就会自动调用该方法。

class BuildSentence(object):
    def __init__(self, intro):
        self.sentence = intro
        self.templates = {
            'name': "; my name is %s",
            'surname': "; my surname is %s",
            'age': "; I am %d years old",
        }

    def __getattr__(self, attr):
        def set(value):
            self.sentence += self.templates.pop(attr) % value
            return self
        return set

    def __str__(self):
        return self.sentence + '.'

示例:

>>> print(BuildSentence('Hello').name('Tim').age(45))
Hello; my name is Tim; I am 45 years old.

关于python - 如何判断最后一个函数是否在类: Python中被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41414622/

相关文章:

Python 和 MySQL 连接

python - 创建子列表

c++ - 创建用户数据库错误 "no match for ' operator= =' in....."--C++

javascript - 一遍又一遍地将新的对象值添加到现有的对象值中

javascript - 在 javascript 中,如何在另一个原型(prototype)方法中调用一个原型(prototype)方法?

java - Scala 的调用层次结构和/或数据流工具

python - 通过python向mysql数据库插入数据

python - 同步本地和远程数据库

algorithm - 我陷入了我的递归

Python, subprocess, call(), check_call 和 returncode 来查找命令是否存在