如何在Python上实现既可以接受内置类型又可以接受自定义类的函数?

时间:2014-06-11 00:59:57

标签: python

我想创建一个用于计算包含未知变量的表达式的库。为此,我做了类似的事情。

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. 

1 个答案:

答案 0 :(得分:4)

如果您的所有自定义类都实现.Evaluate,则可以执行

try:
    return x.Evaluate()
except AttributeError:
    return x