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