簡體   English   中英

Python:創建動態函數

[英]Python : creating dynamic functions

我有問題我想創建動態函數,它將根據從數據庫中檢索的值進行一些計算,我很清楚我的內部計算但是如何創建動態類的問題:

我的結構是這樣的:

class xyz:

    def Project():

       start = 2011-01-03

       def Phase1():
          effort = '2d'
       def Phase2():
          effort = '3d'
       def Phase3():
          effort = '4d'

現在想要動態生成所有PhaseX()函數,這樣任何人都可以建議我如何使用Python代碼實現這樣的功能

等待積極回復問候謝謝

蓋子

def makefunc(val):
  def somephase():
    return '%dd' % (val,)
  return somephase

Phase2 = makefunc(2)
Phase3 = makefunc(3)

注意事項

我最近在同樣的問題上苦苦掙扎,我想寫下我發現為我工作的東西......使用原始的例子。 與前面的答案的不同之處在於我使用setattr來創建函數名稱(作為類的一部分)。

class xyz(object):
    def __init__(self):
        # I wasn't clear how you were using effort...like this?
        self.effort = '0d'
    def add_phases(self, phase_dict): # Take a dictionary of phases and values
        for phase, value in phase_dict.items():
            self.make_phase(phase, value)
    def make_phase(self, phase, value):
        def somephase(self): # Create a closure like @Ignacio
            self.effort = str(value) + 'd'
        setattr(self.__class__, "Phase" + str(phase), somephase)

tracker = xyz()
phases = {1:2, 2:1, 3:6, 4:2}
tracker.add_phases(phases)
tracker.Phase3()
assert tracker.effort == '6d'

這個答案可能假設您的意圖過於簡單,但看起來好像您想為特定函數調用設置一個值。

你會考慮以下內容嗎?

def setEffort(n):
    effort = str(n)+'d' 

您可以使用type函數動態創建python類或元類。 我描述了第一種方法:

myDynamicClassWithDynamicFunctions = type('ClassName', (object,), {
   'phase1': aFunction,
   'phase2': anotherFunction,
   ....})

鍵入的參數是:類名,類基(作為元組),dict中的類屬性。 當然,您可以根據需要以編程方式構造這些參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM