2013-05-22 4 views
18

Roach 클래스가 일정량의 "허기"에 도달하면 Roach 클래스를 "죽게"하고 싶지만 인스턴스를 삭제하는 방법을 모르겠습니다. 나는 내 용어로 실수를하고 있을지 모르지만, 내가 말하고자하는 것은 나는 창문에 "바퀴벌레"가 엄청나게 많아서 특정한 것들이 완전히 사라 지길 바란다는 것입니다.파이썬 : 클래스 인스턴스/객체를 "죽이는"방법은 무엇입니까?

코드를 표시 하겠지만 상당히 길다. 나는 Mastermind classes roach population list에 Roach 클래스를 추가했습니다.

+5

'del '? – TerryA

답변

10

강제로 파이썬 개체를 삭제할 수 없습니다. 아무것도 참조하지 않을 때 삭제됩니다 (또는주기에있는 항목 만주기의 항목이라고 언급 된 경우). 당신은 당신의 "기안자"에게 그 참조를 지워야한다고 말할 것입니다. 일반적

del somemastermind.roaches[n] 
15

:

:

  • 각 바인딩 변수 - - (> 변수 결합 비 참조 객체)> 객체 참조를 감소시키는 몇 가지 일반적인 방법이있다
  • 내부 객체의 참조 카운터 증가

    1. 변수가 선언 된 코드 블록을 종료합니다 (처음 사용)
    2. 모든 속성/방법 변수 참조를 해제한다 363,210
    3. 자폭 객체 -> 객체
    4. 는 (계수 == 0 제거되고 또한 현재의 컨텍스트에서 하나의 객체에 대한 모든 참조 후
  • 를 참조 삭제 del variable 호출 참조)는) 가비지 콜렉션을위한 좋은 후보가된다 있지만 그것이 (reference here 처리 될 것임을 보장되지 :

CPython의 현재 레퍼런스 counti 사용 (선택 사항) 순환 적으로 연결되는 쓰레기 감지 지연 (대부분 개체가 도달 할 수있게되는 즉시)을 수집하지만 순환 참조를 포함하는 쓰레기 수거가 보장되지 않습니다. 순환 쓰레기 수거 제어에 대한 정보는 gc 모듈의 문서를 참조하십시오. 다른 구현은 다르게 동작하며 CPython은 으로 변경 될 수 있습니다. 에 도달 할 수 없으면 (예 : 항상 파일을 닫음) 객체의 즉시 완료에 의존하지 마십시오.

0
for i,roach in enumerate(roachpopulation_list) 
     if roach.hunger == 100 
      del roachpopulation_list[i] 
      break 

채우기 목록 (모든 roach 인스턴스 포함)에서 삭제하여 인스턴스를 제거하십시오.

당신의 바퀴벌레가 파이 게임에서 만들어진 스프라이트라면, .kill의 간단한 명령은 그 인스턴스를 제거합니다.