Skip to main content
 首页 » 编程设计

java之如何在 Python 中实现类似 Java 的枚举

2025年05月04日20jirigala

说这句话的 python 版本是什么..这是在 java 中

public static enum Operations {Add, Subtract, Multiply, Divide, None}; 

我正在将整个程序转换为 python,我就是想不通这部分

这是我的全类同学

    import java.util.*; 
 
public class Expression 
{ 
    public static enum Operations {Add, Subtract, Multiply, Divide, None}; 
    int a; 
    int b; 
    Expression.Operations op; 
    public Expression() 
    { 
        a = 0; 
        b = 0; 
        op = Expression.Operations.None; 
    } 
    public Expression(int value1, int value2, Expression.Operations operation) 
    { 
        a = value1; 
        b = value2; 
        op = operation; 
    } 
 
    public boolean parseString(String expressionString, Map<Character, Integer> vars) 
    { 
        Scanner scanner = new Scanner(expressionString); 
 
        //Attempt to read the first value. 
        if (scanner.hasNextInt()) 
            a = scanner.nextInt(); 
        else if (scanner.hasNext()) 
        { 
            String var = scanner.next(); 
            //Ensure that the variable identifier is a single alphabetical character in length. 
            if (!var.matches("[A-Z]{1}")) 
            { 
                return false; 
            } 
            if (vars.containsKey(var.charAt(0))) 
                a = vars.get(var.charAt(0)); 
            else 
            { 
                System.err.println("ERROR: Uninitialized variable."); 
                return false; 
            } 
        } 
        else return false; 
 
        //If more tokens exist, attempt to read the operator. 
        if (scanner.hasNext()) 
        { 
            String operator = scanner.next(); 
            if (operator.equals("+")) 
                op = Expression.Operations.Add; 
            else if (operator.equals("-")) 
                op = Expression.Operations.Subtract; 
            else if (operator.equals("*")) 
                op = Expression.Operations.Multiply; 
            else if (operator.equals("/")) 
                op = Expression.Operations.Divide; 
            else 
                return false; 
 
            //Attempt to read the second value. 
            if (scanner.hasNextInt()) 
                b = scanner.nextInt(); 
            else if (scanner.hasNext()) 
            { 
                String var = scanner.next(); 
                //Ensure that the variable identifier is a single alphabetical character in length. 
                if (!var.matches("[A-Z]{1}")) 
                { 
                    return false; 
                } 
                b = vars.get(var.charAt(0)); 
            } 
            else return false; 
        } 
 
        return true; 
    } 
    public int evaluate() 
    { 
        int value = 0; 
        if (op == Expression.Operations.Add) 
            value = a + b; 
        if (op == Expression.Operations.Subtract) 
            value = a - b; 
        if (op == Expression.Operations.Multiply) 
            value = a * b; 
        if (op == Expression.Operations.Divide) 
            value = a / b; 
        if (op == Expression.Operations.None) 
            value = a; 
        return value; 
    } 
} 

请您参考如下方法:

Python 没有枚举类。它只是使用普通整数来完成。使模板成为类的一部分的最简单方法是执行以下操作:

class Operation: 
    ADD, SUBTRACT, MULTIPLY, DIVIDE, NONE = range(5) 

这会将 add 分配给 0,将 none 分配给 4。这是最干净的方法(并且它将保证您在此序列中没有任何相同数字的枚举,并且您没有错过了为其中一个号码分配内容。