有没有办法将用户输入的字符串转换成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? ')))
嗨,我最近开始在 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? ')))