我正在尝试编写一些跟踪成员变量访问的模块 通过实例。 1.是否有可能知道成员变量在运行时使用实例进行访问? 2.如果是,任何设计/指针或想法
目的:我想编写简单的脚本,它将读取实例访问的样本文件(模块)和成员变量。所以我们可以将其作为debuging框架的一部分来开发。
例如,如果我在main time.initial_time中写入,而不是我的脚本能够检测到时间实例已访问initial_time。它将在运行时运行。我的意思是,它将成为现有流程的一部分
真实目的 该对象包含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 :(得分:1)
您可以使用描述符来完成。
属性是描述符的特例,但我相信在这种情况下它们不会对你有所帮助。
这是一个符合你想要的描述符:
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)
答案 1 :(得分: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
>>>