2014-02-14 5 views
0

저는 파이썬에 매우 익숙해 져서 친절합니다. 내 프로그램의 모든 생성 된 개체 인스턴스를 추적하는 수단으로 모든 내 프로그램의 기본 디렉터리로 전역 디렉터리 개체 디렉터리를 만들려고합니다.Python : for 루프를 사용하여 객체 목록에서 참조를 꺼내십시오.

그래서 ..

나는 객체 참조 (하지의 id)의리스트를 포함하는 클래스를 만듭니다. 예 :

class objDirectory: 
    name = "" 
    count = 0 
    objDir = [] 
    def __init__(self): 
     print("Initiating object directory.") 
     name = "objDirectory" 
     self.count= 1 
     self.objDir = [ self ] 
     return 
    def getObj(self, name): 
     print("Searching directory for:", name) 
     for o in self.objDir: 
      if o.name is name: 
       print("Returning:", name) 
       return obj 
      else: 
       print("Search failed") 
      return 

그러나, 한 번 개체가 목록에 추가되고 나는 내 객체를 반환하지 않습니다 가져 오기 스크립트를 실행합니다. 심지어는 directory.objDir [x]를 사용하여 확인합니다. (이 항상 내 개체를 참조).

내가 뭘하지 않거나 잘못하고 있니?

감사합니다.

결과 :

setDirectory() 객체 디렉토리를 초기화. 테스트 중복 체크 로깅 : TEST1 개체 수 : 2 T1 = directory.getObj ("TEST1") 디렉토리에 대한 검색 : TEST1 검색이 실패 글로벌 디렉토리 참조 테스트 = OBJ ("테스트") 에서 시작 설정 인쇄 (directory.objDir) [0x032C86F0에서 < 메인 .objDirectory object>, 0x032C8710에서 < 메인 .OBJ object>]

,

답변

0

이 개체를 어떻게 사용할 계획인지 잘 모르겠지만 __init__ 메서드에 몇 가지 문제가 있음을 발견했습니다.
우선, 귀하의 개체는 singleton이어야하지만 그렇지 않습니다. 당신은 클래스가 여기에 속성을 정의 :

class objDirectory: 
    name = "" 
    count = 0 
    objDir = [] 

하지만 당신의 __init__ 방법

당신은 항상 대신 그들에게 추가하는 그들을 무시합니다. 즉, a=objDirectory()과 같은 글을 쓸 때마다 count은의 경우 1 으로 설정됩니다. 또한 (적어도 python2.7에서는) 클래스 속성 (인스턴스 속성과 반대)을 수정할 수있는 모든 함수에 대해 @classmethod 데코레이터가 필요합니다. 좋아요 :

class objDirectory: 
    count=0 

    @classmethod 
    def add_object(cls): 
     cls.count+=1 
    def __init__(self): 
     self.add_object() 

이것은 objDir에도 적용됩니다.
두 번째로 __init__ 메서드에는 name이라는 변수가 사용되지 않습니다. 아마도 self.name을 의미할까요?

class mySingleton(object): 
    singletonObject = None 
    def __new__(cls): 
     if not cls.singletonObject: 
      cls.singletonObject = super(mySingleton, cls).__new__(cls) 
     return cls.singletonObject 

__new__ 방법은 실제를 생성하는 정적 방법은 다음과 같습니다

그러나 여기 당신이 파이썬의 새로운면 이해하기 쉬울 수 있습니다 간단한 예입니다, 싱글 톤을 구현하는 더 나은 방법이있다 예. 반환 값은 새로 생성 된 인스턴스입니다. 이렇게 재정의하면 mySingleton()에 대한 각 호출마다 동일한 인스턴스가 생성됩니다. 문 mySingleton() is mySingleton()은 항상 true입니다.

+0

정말 고맙습니다. 여기에있는 것들 중 일부를 머리에 감쌀 필요가 있지만, 여전히 배울 점이 많습니다. – user3312001

관련 문제