Python中的多个函数

Mak*_*kin 7 python python-3.x

我们有一些变量或其他实例:a ='?'.我们有这样的输入:

f = a(3112).bas(443).ssad(34) 
Run Code Online (Sandbox Code Playgroud)

当我们打字

print(f)
Run Code Online (Sandbox Code Playgroud)

输出应该是:

3112a-443bas-34ssad
Run Code Online (Sandbox Code Playgroud)

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

这,我有:

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)
Run Code Online (Sandbox Code Playgroud)

我的输出:

100
b
200
c
300
d
400
Run Code Online (Sandbox Code Playgroud)

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

Aro*_*unt 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))
Run Code Online (Sandbox Code Playgroud)

产量

100a-200bas-300ssad
Run Code Online (Sandbox Code Playgroud)

但是也

 print(A(100).egg(200).bacon(300).SPAM(1000))
Run Code Online (Sandbox Code Playgroud)

产量

100a-200egg-300bacon-1000SPAM
Run Code Online (Sandbox Code Playgroud)

静态方式

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))
Run Code Online (Sandbox Code Playgroud)

产量

100a-200bas-300ssad
Run Code Online (Sandbox Code Playgroud)

关于__str__的更多信息


Ska*_*dix 5

您可以重写该__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
Run Code Online (Sandbox Code Playgroud)