python 變數 II
有時候我們在多個不同的class之間使用了同一個模組。而模組中有些變數,我們希望其可以跟著變動。
我們舉個例子來看看
第一個檔案 vv.py
import os, sys
class vv():
vva = 1
vvb = 2
第二個檔案 v1.py
import vv
class v1():
def __init__(self):
self.aa = vv.vv()
self.aa.vva=9999
def show(self):
print self.aa.vva
print self.aa.vvb
第三個檔案為主程式 vmain.py
import vv
import v1
class main():
def __init__(self):
self.a = v.vv()
def show(self):
print self.a.vva
print self.a.vvb
def change(self):
self.a.vva=12345
self.a.vvb=54321
def gotV1(self):
aa = v1.v1()
aa.show()
if __name__ == '__main__':
aa=main()
aa.show()
aa.change()
aa.show()
aa.gotV1()
print " new object "
bb = main()
bb.show()
當我們執行了vmain.py 得到
1
2
12345
54321
9999
2
new object
1
2
我們企圖在change中改變vva的數字,。這個合理,每一個新的物件,都該保有其參數原來的值。如果我們希望new object下,新物件的值也一起被改變呢?
import vv
import v1
class main():
def __init__(self):
self.a = v.vv()
def show(self):
print self.a.vva
print self.a.vvb
def change(self):
self.a.__class__.vva=8888888888888888
self.a.vvb=54321
#self.a.change()
def gotV1(self):
aa = v1.v1()
aa.show()
if __name__ == '__main__':
aa=main()
aa.show()
aa.change()
aa.show()
aa.gotV1()
print " new object "
bb = main()
bb.show()
當我們執行了vmain.py 得到
1
2
88888888
54321
9999
2
new object
88888888
2
使用__class__,就可以讓模組中的參數,全面的改變了。注意到9999,這個在v1.py中被設定的值並沒有被__class__改變。如同之前提到過,python中給定一個值這件事,會產生一個新變數。所以__class__改變不會改變到 v1.py中的vv 物件的vva。
留言
張貼留言