Python中的多个函数

时间:2018-02-16 09:11:46

标签: python python-3.x

我们有一些变量或其他实例:a ='?'。 我们有这样的意见:

f = a(3112).bas(443).ssad(34) 

当我们输入

print(f)

输出应为:

3112a-443bas-34ssad

我已经尝试了一些方法来解决这个问题,并找到了有关链接的信息,但我仍然遇到了问题。我无法将类名返回到字符串的开头。

这就是我所拥有的:

class A():       

    def __getattribute__(self, item):
        print (str(item))
        return super(A, self).__getattribute__(item)    

    def __init__(self, x):
        self.x = x
        print (str(x))

    def b(self, item):
        print (str(item))        
        return self

    def c(self, item):
        print (str(item))
        return self

    def d(self, item):
        print (str(item))
        return self

A(100).b(200).c(300).d(400)

我的输出:

100
b
200
c
300
d
400

但是我无法在一个字符串中连接它。

3 个答案:

答案 0 :(得分:6)

动态方式

class A(object):

    def __init__(self, integer):
        self._strings = ['{}a'.format(integer)]


    def __getattr__(self, attrname, *args):
        def wrapper(*args, **kwargs):
            self._strings.append('{}{}'.format(args[0], attrname))
            return self

        return wrapper


    def __str__(self):
        return '-'.join(self._strings)


print(A(100).bas(200).ssad(300))

输出

100a-200bas-300ssad

但也

 print(A(100).egg(200).bacon(300).SPAM(1000))

输出

100a-200egg-300bacon-1000SPAM

静态方式

class A(object):

    def __init__(self, integer):
        self._strings = ['{}a'.format(integer)]


    def bas(self, integer):
        self._strings.append('{}bas'.format(integer))
        return self

    def ssad(self, integer):
        self._strings.append('{}ssad'.format(integer))
        return self

    def __str__(self):
        return '-'.join(self._strings)


print(A(100).b(200).c(300))

输出

100a-200bas-300ssad

More about __str__

答案 1 :(得分:4)

您可以覆盖__str__方法来定义特定输出:

class A():
    def __init__(self, a, b="", c="", d=""):
        self._a = a
        self._b = b
        self._c = c
        self._d = d

    def __str__(self):
        return '{}a-{}b-{}c-{}d'.format( self.a, self.b, self.c, self.d )

    def b(self, item):
        self._b = item
        return self

    def c(self, item):
        self._c = item
        return self

    def d(self, item):
        self._d = item
        return self

f = A(100).b(200).c(300).d(400)
print(f)  # 100a-200b-300c-400d

答案 2 :(得分:2)

这里我以另一种方式尝试了它,即,如果你想获取函数名而不是手动给它,你可以在python中使用inspect。试试这段代码:

import inspect


class A():
   l = []

   def __init__(self, x):
        self.x = x
        print (str(x))
        self.l.append(str(x) + "a")

    def b(self, item):
        print (str(item))
        self.l.append(str(item) + inspect.stack()[0][3])
        return self

    def c(self, item):
        print (str(item))
        self.l.append(str(item) + inspect.stack()[0][3])
        return self

    def d(self, item):
        print (str(item))
        self.l.append(str(item) + inspect.stack()[0][3])
        return self


print("-".join(A(100).b(200).c(300).d(400).l))

o / p就像:

'100a-200b-300c-400d'