我正在擴展一個開放源碼的python產品,但我無法直接更改代碼,因爲這會使上游更改變得更加困難。在python中更改函數或方法中的局部變量
所以不是直接改變函數,而是想從另一個地方操作函數內部的局部變量。我想添加一個關鍵字作爲局部變量在函數內創建的字典。我將如何能夠改變這個本地dic變量?這可能嗎?
採取爲例下面的代碼:
import functools
class API(object):
def update_resources(self, host):
bla = sflkj
dic = {
'cpu': 5,
'memory': 500
}
class APIExtension(API):
def update_resources(self, host):
# But first do our changes to the function here
# The change that I want to do is add a key: 'workload'
# this is the function I want to change the dic variable to include workload
super(APIExtension, self).update_resources
「......這將使合併上游變化更難」。這就是git的用途。或者提供一個補丁來外化變量。 –
如果你偏離上游太多並直接在上游文件中更改所有內容,你將無法輕鬆應用補丁和櫻桃選擇。這是關於openstack的,它提供了一種擴展apis的方法,所以我們創建了自己的API擴展,這是建議的方式。我們現在可以輕鬆地合併錯誤修復,而無需始終手動應用修補程序,因爲文件不再匹配。我同意你的看法,它是一個很好的觀點。 + 1ed它。 –
你不能操縱局部變量,但你肯定可以操縱結果。由於我假設局部變量被使用和應用在代碼中的某個地方,它不僅具有局部範圍,您可能想要在那裏「掛鉤」。但沒有更多細節,很難幫助你。另一種選擇是覆蓋update_resources completeley,而不調用super。 – schacki