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

如何判断是否在类中调用了最后一个函数:Python,python,function,call,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 surn

我有一个类似于以下内容的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_-sensume”函数不一定返回字符串,它可以是整数或列表。我不确定是否可以识别最后调用的函数

例如:

s = BuildSentence("Hello")
answer = s.name("Foo").age(40)
应该“做点什么”:

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

将最后一个方法的名称更改为
\uuuu str\uuu

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 __str__(self):
        self.sentence += "."
        return (self.sentence)
召唤

输出

Hello; my name is Foo; I am 50 years old; my surname is 50.

您可以使用
\uuuu str\uuuu
-方法,每当需要字符串时自动调用该方法

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.

几乎可以肯定您有一个。您可以维护此权限的状态吗?为类指定一个返回最后一句的方法。为什么要为此使用类?为什么不使用一个简单的函数:
构建句子(介绍、姓名、姓氏、年龄)
?还要注意,您的方法不一致。。。如果
print(s.nam姓氏(“Bar”)
应该按照您希望的方式工作,它必须返回
str
。但是你希望能够链接
s.name(“Foo”).age(50)
.name
必须返回
self
。谢谢!这太棒了!
>>> print(BuildSentence('Hello').name('Tim').age(45))
Hello; my name is Tim; I am 45 years old.