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。


留言

這個網誌中的熱門文章

python 找圖自動點擊

Python pyserial 抓取系統內的 COM PORT

VBA EXCEL 工作表變化 馬上執行 的作法 Worksheet_Change