2016-02-29 59 views
0

我想寫一些通過實例跟蹤成員變量訪問 的模塊。 1.是否有可能知道成員變量在運行時使用實例訪問? 2.如果是,任何設計/指針或想法通過實例跟蹤成員變量訪問

目的:我想寫簡單的腳本,它將讀取實例訪問的示例文件(模塊)和成員變量。所以我們可以將其作爲調試框架的一部分來開發。

例如,如果我在主time.initial_time中編寫比我的腳本能夠檢測到initial_time已被time Instance訪問的腳本。它將在運行時運行。我的意思是,這將是現有流程的一部分

真正目的 對象包含1000的價值,但他們中的一些由每個模塊。如果它成爲調試框架,那麼我們可以通過實例輕鬆識別和打印成員變量訪問的信息。是的,每個模塊都創建數據類的實例。 示例文件

"""testing pylint code""" 
#!/usr/bin/env py 
class Sample(object): 
    """create sample class""" 
    def __init__(self): 
     """seting variable""" 
     self.intial_time = 0 

def main(): 
    """main functionality""" 
    time = Sample() 
    print time.initial_time 

if __name__ == " __main__": 
    main() 

回答

0

有可能是一個更好的答案更適合您的特定需求(試圖找出未使用的變量),但是Python有一個property裝飾,你可以使用:

class Sample(object): 

    def __init__(self): 
     self._initial_time = 0 

    @property 
    def initial_time(self): 
     print('self.initial_time has been read') 
     return self._initial_time 

>>> print(Sample().initial_time) 
self.initial_time has been read 
0 
>>> 
0

你可以用描述符來做。

屬性是描述符的一個特例,但我相信在這種情況下它們不會幫助你。

這裏是一個描述符,它不正是你想要什麼:

from collections import defaultdict 

class TrackedAttribute: 

    def __init__(self, default_value): 
     self.default = default_value 
     # Dict mapping an instance to it's value 
     self.instance_dict = defaultdict(lambda: default_value) 

    def __get__(self, inst, owner): 
     if inst is None: 
      print("Accessed from class %r" % (owner,)) 
      return self.default 
     print("Accessed from instance %r" % (inst,)) 
     return self.instance_dict[inst] 

    def __set__(self, inst, value): 
     print("Setting from instance %r" % (inst,)) 
     self.instance_dict[inst] = value 


class Simple: 
    time = TrackedAttribute(0)