1
我想创建一个库,用于计算未知变量的表达式。为了做到这一点,我做了这样的事情。如何实现既可以接受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.
这是Python的方式来做到这一点。也被称为“比权限更容易要求原谅”: http://programmers.stackexchange.com/questions/175655/python-forgiveness-vs-permission-and-duck-typing – steveha