查找从Borg类派生的当前执行方法的父类(非超类)
我想创建一个从borg类派生的类
将作为脚本的一部分进行实例化或在其他类中包含.
当调用Borg类的方法时,我想知道
包含Borg类的类名称.
我从SYS模块的Inspect和_GetFrame玩过一些
获得不一致的结果.主要问题是Borg类是
实例化了包含类的外部,然后我需要上一个
不同数量的堆栈帧.但是这个信息不是
直到我用完堆栈框架之后.
希望以下代码更好地描述我要做的事情.
导入系统
博格级:
_shared_state = {}
def __init __(自我):
self .__ dict __ = self._shared_state
班级同化(Borg):
ValueByCaller = {}
def __init __(self,setupValue):
打印"同化.__ INT __()"
打印"设置为:" + str(setupValue)
#希望键是类的名称(或模块)
#继续同化
callerid = sys._getFrame(1).f_code.co_name
self.valuebycaller [callerid] = setupValue
打印self.valuebycaller
def动作(self,称为value):
打印"同化为Action()"
打印" self .__ className__:" + self .__ class __.__ name __
打印"称为Value为:" + str(称为Value)
打印" self.valuebycaller"
打印self.valuebycaller
#需要根据哪个类(或模块)获取正确的密钥
#打电话
#打印" 0:" + sys._getFrame(0).f_code.co_name
#打印" 1:" + sys._getFrame(1).f_code.co_name
#打印" 2:" + sys._getFrame(2).f_code.co_name
#打印" 3:" + sys._getFrame(3).f_code.co_name
callerid = sys._getFrame(2).f_code.co_name
打印" CallerId"
打印CallerID
if(self.valuebycaller [callerid] <= natervalue):
打印"行动"
A类:
assim_object =同化(2)
def __init __(自我):
self.assim_object.action(2)
self.assim_object.action(3)
B类:
assim_object =同化(3)
def __init __(自我):
self.assim_object.action(3)
self.assim_object.action(4)
C类:
assim_object =同化(4)
def __init __(自我):
self.assim_object.action(4)
self.assim_object.action(5)
a = a()
b = b()
C = C()
obj =同化(3)
#obj.action(3)
当我运行此功能时,我将获得以下输出:
在被同化的.__ Init __()中
设置值是:2
{'A2}
在被同化的.__ Init __()中
设置值是:3
{'a':2,'b':3}
在被同化的.__ Init __()中
设置值是:4
{'a':2,'c':4,'b':3}
在同化(Action)中()
self .__ className__:被同化
称呼为:2
self.valuebycaller
{'a':2,'c':4,'b':3}
来电显示
<模块>
Trackback(最近的最新电话):
文件" \ callerid.py",第67行,
a = a()
文件" \ callerid.py",第49行,in __init__
self.assim_object.action(2)
文件" \ callerid.py",第41行,行动
if(self.valuebycaller [callerid] <= natervalue):
KeyError:'
当我开始时,我发现最奇特的是
valuebycaller字典在__init____________________________
A的方法被执行.我很确定这与
差异 当对象实例化时,何时到达
初始化,但我需要做更多的研究和阅读才能成为
能够向自己解释.
感谢你给与我的帮助.
凯文