如果我的問題中的術語不正確,請提前道歉。我想知道是否有可能重寫一個隱藏在一堆連續的Class調用中的變量,這些調用你也沒有直接訪問,但仍然會影響結果。如何覆蓋python中嵌入的函數/定義值
這是我試圖寫的一個例子,希望能讓我的問題更清楚。
我有3個python模塊,test1.py,test2.py和test3.py。每個模塊都有一個類和一些定義。 Test2.py是代碼運行的地方。
Test1.py
class A(object):
def __init__(self, value=5):
self.a = value
def foo(self, value3 = 7, value4 = 5):
from test3 import D
c = self.a + value3 + value4
d = D()
e = d.B()
f = c + e
return f
class B(object):
def __init__(self, value = 1):
self.d = value
object1 = A(self.d)
self.fooReturn = object1.foo()
def bar(self, value2 = 3):
f = value2
g = self.fooReturn + self.d + f
return g
Test3.py
class D(object):
def __init__(self, value=6, wanted_value=9):
self.value = value + wanted_value
def A(self, value3 = 4):
self.value3 = value3 * 2
return self.value3
def B(self, value4 = 5):
valuex = self.A()
value5 = value4 + self.value + valuex
return value5
Test2.py
from test1 import B
if __name__ == '__main__':
test = B(4)
result = test.bar()
print result
返回的值: -
55
對不起,它看起來如此複雜,這是我的方式試圖使價值看起來正常達到:)
基本上我想要做的是找出如何重新定義'wanted_value'在Test3.py中,D類,init def,同時不改變Test2.py中的'if'。我可以看到也許有可能
if __name__ == '__main__':
test = B(4)
result = test.bar()
print result
一種方法是重新界定Test2.py的d類定義和原來的d類中的任何呼叫重定向到使用全局變量的修改之一。
例如
Test2.py
from test1 import B
from test3 import D
class Dx(D):
# add the value I want to use to 'wanted_value'
def __init__(self, value=6, wanted_value=3):
self.value = value + wanted_value
# create a global
D.__init__ = Dx.__init__
if __name__ == '__main__':
test = B(4)
result = test.bar()
print result
這個錯誤說「未綁定method_ 初始化 _()必須採用DX實例作爲第一arguement被調用。
所以這顯然是不正確的,但如果這些方法可以使它不必重新定義整個D類?
任何幫助將是偉大的。這可能是顯而易見的,我的繼承知識不是太熱崩潰:)
謝謝。
+1「這裏是你怎麼做的:)」 – jsbueno 2012-02-24 12:01:02
@ben非常感謝你的詳細解釋本。正是我所追求的並且非常有意義。 – user788462 2012-02-26 20:17:42
@Ben只是爲了擴大這個問題。是否有可能只是改變一個不是__init__的特定變量。例如。在B類中說,def B()中有一個變量,self.variable = 8。是否有一種簡單的方法可以覆蓋整個def並改寫它? – user788462 2012-02-27 20:36:10