如何获取调用__init__方法的子类

时间:2012-10-20 13:10:47

标签: python logging

我有以下课程:

import cfg
import sqlite3
import logging

# logger = logging ......

class Connection:
    def __init__(self):
        try:
            self.connection = sqlite3.connect(cfg.pathToDatabase)
            self.connection.row_factory = sqlite3.Row
            self.cursor = self.connection.cursor()
            logger.info("Connection to database at " + cfg.pathToDatabase + " successful")
        except Exception, e:
            logger.critical("Error connecting to database")
            logger.exception(e)

此类将从多个类中实例化。在以下行中:

logger.info("Connection to database at " + cfg.pathToDatabase + " successful")

我想在 Connection 类中记录 调用 __ init __方法的类。这可能吗?

例如,基于以下内容:

class Child:
    def __init__(self):
        self.connection = Connection()

我想看到这个记录:

"Connection to database at data.sqlite successful from class: Child"

1 个答案:

答案 0 :(得分:1)

这样的东西?

import traceback, sys

class C:
    def __init__(self):
        try:
            raise StopIteration
        except StopIteration:
            tb = sys.exc_info()[2]
            stack = traceback.extract_stack(tb.tb_frame)
            f = stack[-2]
            print "I was called from %s %s (%s:%s)" % (f[2], f[3], f[0], f[1])

class A:
    def __init__(self):
        self.c = C()

def foo():
    A()
    return C()

def main():
    C()
    foo()

if __name__ == '__main__':
    main()

输出:

I was called from main C() (test.py:22)
I was called from __init__ self.c = C() (test.py:15)
I was called from foo return C() (test.py:19)