在Sympy中定义一个新的逻辑操作

时间:2016-09-06 17:50:45

标签: python-3.x sympy logical-operators

我一直在阅读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
        {
        }
    };
    ~~~~~~~
}

如何在不修改类的情况下添加新操作?

1 个答案:

答案 0 :(得分:1)

如果你的对象不是一个函数,你应该继承sympy.logic.boolalg.BooeanFunction(或只是Boolean。 BooleanFunction本身是Function的子类,意味着您使用与Function相同的行为来定义其操作,即定义classmethod eval,它在您希望对象评估时返回值,而None在它应该保持未评估时返回。例如,参见Not的定义。

如果您的操作是晶格操作符(和And一样),您也可以使用LatticeOp,这简化了它们的定义。

对于运算符本身,如果要重载运算符,请在类上为其定义__method__。 Python只允许重载某些specific operators,并且你不能改变它们的优先级,所以根据你的运算符是什么,可能没有合理的运算符可以为它定义,在这种情况下,你需要使用函数表示法。