我正在嘗試提出一個動態函式呼叫系統。我有一個包含許多不同級別的資料庫:決策評估器 > 函式(回應曲線)引數 > 輸入。選擇一個決策評估器可能會呼叫 10 個不同的函式,但只有 5 個輸入,通過引數進行不同的處理。因此,擁有一個動態系統要比為每個主要級別創建所有子呼叫要容易得多。
在下面的測驗中,我可以從上層('test')動態呼叫下層函式。當我嘗試傳遞引數時,我得到錯誤'str' object is not callable。這是跟蹤:
C:\ProgramData\Anaconda3\lib\site-packages\openpyxl\worksheet\_reader.py:312: UserWarning: Data Validation extension is not supported and will be removed
warn(msg)
Traceback (most recent call last):
File "C:\Users\*\considerations.py", line 28, in <module>
ich.dynamic_call(abcd_3(show_test))
TypeError: 'str' object is not callable
init ICH...
oouh weee look at me
Process finished with exit code 1
注意事項.py:
from input_clearing_house import InputClearingHouse
import pandas as pd
inputs = pd.read_excel(r'AXIS_DB.xlsx', sheet_name='Inputs')
considerations = pd.read_excel(r'AXIS_DB.xlsx', sheet_name='Considerations')
decision_score_evaluator = pd.read_excel(r'AXIS_DB.xlsx', sheet_name='DecisionScoreEvaluator')
decision_maker = pd.read_excel(r'AXIS_DB.xlsx', sheet_name='DecisionMaker')
considerations = pd.merge(considerations, inputs, on='input_name')
# print(considerations)
ich = InputClearingHouse()
abcd_2 = 'test'
abcd_3 = 'multi21'
show_test = 'dynamite'
ich.dynamic_call(abcd_2)
ich.dynamic_call(abcd_3(show_test))
input_clearing_house.py:
import math
class InputClearingHouse:
def __init__(self):
print('init ICH...')
def dynamic_call(self, name, *args, **kwargs):
call_fct = f'{name}'
if hasattr(self, call_fct) and callable(func := getattr(self, call_fct)):
func(*args, **kwargs)
def test(self):
print("oouh weee look at me")
def multi21(self, *args):
for arg in args:
print(arg)
def distance_to_target(self, source: tuple, target: tuple) -> float:
return math.sqrt((source[0] - target[0]) ** 2 (source[1] - target[1]) ** 2)
def my_endurance(self, current: int, maximum: int) -> float:
return current / maximum
uj5u.com熱心網友回復:
abcd_3(show_test)試圖abcd_3用作函式,但它是一個命名函式的字串。
ich.dynamic_call()期望呼叫的函式的名稱和引數是單獨的引數,因此您應該使用
ich.dynamic_call(abcd_3, show_test)
uj5u.com熱心網友回復:
您的dynamic_call()方法已經處理了可變數量的引數。
我認為您只是想添加引數:
ich.dynamic_call(abcd_3, show_test)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/496386.html
下一篇:C 中使用資料成員的運行時多型性
