想知道是否有任何方法可以根據我們給一個物件的引數來運行某個函式。例如,如果我們傳遞 1,它將運行 function_1,但如果我們傳遞 2,它將運行 function_2。像這樣:
class my_Class:
def func(self, num):
self.__dict__[f"func_{num}"](num)
def func_1(self, num):
print("test", num)
def func_2(self, num):
print("test", num)
class_obj = my_Class()
class_obj.func(1)
class_obj.func(2)
我想要的輸出是:
test 1
test 2
uj5u.com熱心網友回復:
這是您可以嘗試的解決方案,使用 getattr
class my_Class:
def func(self, num):
self.__dict__[f"func_{num}"](num)
def func_1(self, num):
print("test", num)
def func_2(self, num):
print("test", num)
def run(self, func_id): # <-- wrapper that call's the inner function based on id
getattr(self, f"func_{func_id}")(func_id)
class_obj = my_Class()
class_obj.run(1) # <-- Call wrapper instead with function idx
class_obj.run(2)
uj5u.com熱心網友回復:
代碼
class my_Class:
def func(self, num):
getattr(self,"func_" str(num))(num)
def func_1(self, num):
print("test", num)
def func_2(self, num):
print("test", num)
class_obj = my_Class()
class_obj.func(1)
class_obj.func(2)
輸出:
test 1
test 2
說明
您可以使用該函式getattr()從字串中呼叫函式,稍后您可以將該字串更改為您想要作為源的任何格式(字典、串列等)
uj5u.com熱心網友回復:
帶有 if 或 switch 案例
例如
class my_Class:
def func(self, num):
if(num == 1):
self.func_1(num)
if(num == 2):
self.func_2(num)
def func_1(self, num):
print("test", num)
def func_2(self, num):
print("test", num)
class_obj = my_Class()
class_obj.func(1)
class_obj.func(2)
uj5u.com熱心網友回復:
您可以通過使用指向函式的串列/元組/字典創建映射來實作這一點,例如:
class MyClass: # search pep8 to see the conventional way of writing class names in python
def __init__(self):
self.functions_map = (self.func_1, self.func_2)
def func(self, functions_index, *args):
self.functions_map[functions_index](*args)
def func_1(self, num):
print("test", num)
def func_2(self, num):
print("test", num)
然后,為了呼叫函式,請執行以下操作:
class_obj = MyClass()
class_obj.func(0, 3) # remember indexes start at 0, and not 1
class_obj.func(1, 5)
其中 3 和 5 是作為引數傳遞給 func_1 和 func_2 的數字
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/326729.html
