有没有办法将用户输入的字符串转换成python中的class方法名?

Is there a way to convet a user's input string into a class method name in python?

嗨,我最近开始在 python 中使用 classes,并且有一个代码我必须使用 class 来转换温标。例如,您选择两个刻度并在第一个刻度中给出温度,第二个刻度中的温度将以 output.one 方式显示,方法是使用 if 条件,例如我可以从用户那里获得输入,然后检查条件调用所需的方法:

class temp_convertor: 
def c_f(c):
    f = 1.8*(c)+32
    return f
def f_c(f):
    c = (f-32)*(5/9)
    return c
def c_k(c):
    k = c +273.15
    return k
def k_c(k):
    c = k-273.15
    return c
def c_r(c):
    r = temp_convertor.c_f(c)+ 459.67
    return r
def r_c(r):
    c = temp_convertor.f_c(r-459.67 )
    return c
def k_r(k):
    r = temp_convertor.c_r(temp_convertor.k_c(k))
    return r
def r_k(r):
    k = temp_convertor.c_k(temp_convertor.r_c(r))
    return k
a = input("scale1,scale2: ")
if a == "f,c":
    temp_convertor.f_c(float(input("temp? ")))
elif a == "c,f":
    temp_convertor.c_f(float(input("temp? ")))
# and for every convertor I should continue checking conditions :(

但我以前使用 global()[name] 来调用函数,例如:

def apple(a):
    print(2*a)
globals()[input("type apple if you want to double your number: ")](int(input("number: ")))

输出是这样的:

type apple if you want to double your number: apple
number: 5
10

但我不能在这里使用它:

class temp_convertor: 
    def c_f(c):
        f = 1.8*(c)+32
        return f
    def f_c(f):
        c = (f-32)*(5/9)
        return c
    def c_k(c):
        k = c +273.15
        return k
    def k_c(k):
        c = k-273.15
        return c
    def c_r(c):
        r = temp_convertor.c_f(c)+ 459.67
        return r
    def r_c(r):
        c = temp_convertor.f_c(r-459.67 )
        return c
    def k_r(k):
        r = temp_convertor.c_r(temp_convertor.k_c(k))
        return r
    def r_k(r):
        k = temp_convertor.c_k(temp_convertor.r_c(r))
        return k
print(temp_convertor.globals()[input("scale1_scale2")](float(input("temp? "))))

错误是:AttributeError: type object 'temp_convertor' has no attribute 'globals' 我想知道第二种解决方案是否可行,如果不行,是否有更短的解决方案? 感谢阅读本文!

使用

getattr(temp_convertor, input('scale1_scale2: '))(float(input('temp? ')))