我想创建一个用于计算包含未知变量的表达式的库。为此,我做了类似的事情。
A = Forward() # Syntax from pyparsing
C = Forward()
B = A * 4 + C # B has Expr type.
A << 4
C << 4
# B can be evaluated to value 20 now
D = 8
print(Evaluate(B)) # should print 20
print(Evaluate(A)) # should print 4
print(Evaluate(D)) # should print 8
我想让Evaluate函数接受int,Forward,Expr和更多类型。由于int类型不能有自定义方法,因此简单的鸭子输入似乎不起作用。
是否有更多的pythonic?
def Evaluate(x):
if isinstance(x, int):
return x
else:
return x.Evaluate() # Forward, Expr has Evaluate method.
答案 0 :(得分:4)
如果您的所有自定义类都实现.Evaluate
,则可以执行
try:
return x.Evaluate()
except AttributeError:
return x