我一直在阅读Sympy的源代码,试着弄清楚我是否可以添加自己的逻辑操作。这是定义逻辑操作的地方: https://github.com/sympy/sympy/blob/master/sympy/logic/boolalg.py
是否可以不修改库本身? 我假设我需要创建一个扩展BooleanFunction但后来在这段代码中的类:
protected override void OnCreate(global::Android.OS.Bundle bundle)
{
Xamarin.Insights.Initialize(Keys.InsightsApiKey, this);
AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
{
try
{
var ex = ((Exception)e.ExceptionObject).GetBaseException();
Console.WriteLine("**SPORT MAIN ACTIVITY EXCEPTION**\n\n" + ex);
Insights.Report(ex, Xamarin.Insights.Severity.Critical);
}
catch
{
}
};
~~~~~~~
}
如何在不修改类的情况下添加新操作?
答案 0 :(得分:1)
如果你的对象不是一个函数,你应该继承sympy.logic.boolalg.BooeanFunction
(或只是Boolean
。 BooleanFunction本身是Function的子类,意味着您使用与Function相同的行为来定义其操作,即定义classmethod eval
,它在您希望对象评估时返回值,而None在它应该保持未评估时返回。例如,参见Not的定义。
如果您的操作是晶格操作符(和And一样),您也可以使用LatticeOp,这简化了它们的定义。
对于运算符本身,如果要重载运算符,请在类上为其定义__method__
。 Python只允许重载某些specific operators,并且你不能改变它们的优先级,所以根据你的运算符是什么,可能没有合理的运算符可以为它定义,在这种情况下,你需要使用函数表示法。