【发布时间】:2021-10-12 14:56:40
【问题描述】:
我正在尝试组合一些类方法或对其自身应用初始化值但没有成功。
class numOper:
def __init__(self, x):
self.x = x
def multiply(self, x):
self.x *= x
def add(self, x):
self.x += x
a = numOper(5)
print(a.x) # 5
a.multiply(3)
print(a.x) # 15
a.add(7)
print(a.x) # 22
a = numOper(5) # x = 5
a.multiply(3).add(7) # Error; trying multiply and then add to result
print(a.x)
a = numOper(5) # x = 5
a.multiply(a) # Error; trying to multiply by itself
这些结果
AttributeError: 'NoneType' object has no attribute 'multiply'
AttributeError: 'NoneType' object has no attribute 'add'
有没有办法做到这些?还是调查?
在程序化 python 中,这似乎可行。
a = 5
def addf(a):
a += a
return a
addf(a)
或
a = 5
def addf(a):
a += a
return a
def double(a):
a *= 2
return a
double(addf(a))
【问题讨论】:
-
您必须返回
self才能链接方法调用 -
DeepSpace 所说的...但是,请务必仔细考虑此 API 可能会造成混淆,因为它会在内部修改
numOper的状态作为副作用。 -
傻瓜,本来可以这么想的!感谢所有贡献者。
-
您可能还想查看您的类的特殊方法,例如
__iadd__,它专门覆盖+=,因此您可以在代码中包含a += 3。