我们有一些变量或其他实例: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
但是我无法在一个字符串中连接它。
答案 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
答案 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'