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

How to tell if the last function was called in a class: Python

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

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'函数不一定是return一个字符串,它可能是一个整数或者列表。我不确定是否可以识别最后调用的函数?

例如:

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

    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)

致电

s = BuildSentence("Hello")
s.name("Foo") 
s.age(50)
s.surname(50)
print( s )

输出

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

您可以使用 __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.