2012-10-20 4 views
0

라는 자식 클래스 얻는 방법 :이 클래스는 여러 클래스에서 인스턴스화됩니다나는 다음과 같은 클래스가 __init__ 메쏘드

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 to database at data.sqlite successful from class: Child" 
+0

"이쪽"은 무엇입니까? 수업을 사용하는 방법이나 방법을 보여주지 않았습니다. – defuz

+0

OK 첫 번째 질문이 필요하다고 생각하지 않습니다. 그 중 하나를 알아 냈습니다. 그에 따라 내 질문을 편집했습니다. – Sherlock

+1

왜 'Connection' 클래스가 인스턴스화되는 클래스 만있을 것이라고 생각하십니까? 하나는 어디서나 그것을 인스턴스화 할 수 있습니다. 그리고 일반적으로 클래스가 누가 그것을 호출했는지 알 수있는 나쁜 습관과 그 정보에 기초한 무언가를하십시오. – Vikas

답변

1

뭔가 :

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

나는이 기록을보고 싶으십니까?

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) 
+0

이것은 완벽합니다, 고마워요 :) – Sherlock

+0

정말 가짜 예외가 필요합니까? 나는 파이썬이 스택에 직접 접근 할 수있는 방법이 있다고 생각했을 것이다. – millimoose

+0

다음과 같이하십시오. http://docs.python.org/library/traceback.html#traceback.extract_stack – millimoose

관련 문제