我在想如果下面的策略是在方法中創建動態函數的合適/ pythonic方法。我們的目標是讓一個類可以基於由FUN()
定義的複雜模型來計算值,但是我希望能夠在腳本中更改該模型而不重寫它,或者創建一堆不同類的類(因爲這函數是我期望改變的唯一的東西)。創建動態類方法的Python方法
我也讀過對這個question的迴應,我有它結構的方式可能最終會變慢?我打算打電話setupFunction()
1到3次模擬(改變模型)並呼籲FUN
幾千次。
僞...
class MyClass:
def __init__(self, model = 'A'):
self.setupFunction(model)
# Other Class Stuff...
def setupFunction(self, _model):
if _model == 'A':
def myFunc(x):
# Do something with x, store in result
return result
else:
def myFunc(x):
# Do something different with x
return result
self.FUN = myFunc
# Other Class Methods... some of which may call upon self.FUN
Model1 = MyClass('A')
Model2 = MyClass('B')
print(Model1.FUN(10))
print(Model2.FUN(10))
我已經做了一些小的測試和上面的好像是在第一眼就不會打破。我知道我還可以做的做,而不是下面類似的東西,但隨後將要測試的每個呼叫的模式FUN()
,我會在年底有很多不同的典型案例:
class MyClass():
def __init__(self, model = 'A'):
def FUN(self, x):
if self.model == 'A':
# result = Stuff
else:
# result = Other Stuff
return result
還是新蟒蛇,所以謝謝任何反饋!
當然,這是好的。函數和擴展方法是第一類對象,因此您可以動態地將它們分配給您的內容。這取決於您是否使您的代碼更易於維護或更令人困惑。但從表面上看,這很好。 – RobertB
我投票結束這個問題,因爲它應該在Stack Exchange Code Review站點上。 –