빠른 질문, del object
라고 말하면 파이썬이 호출하는 마법 방법은 무엇입니까? 나는 그것이 __del__
이 아니고, __delete__
이 아니란 것을 압니다. 아무 것도 호출되지 않으면 객체를 삭제할 때 발생하는 이벤트를 어떻게 사용자 정의 할 수 있습니까? python del 문에 대한 매직 방법?
는 다음의 예를 살펴 :
class SingletonError(Exception):
pass
class Singleton(type):
def __new__(metacls, name, parents, kwargs):
cls = super(Singleton, metacls).__new__(metacls, name, parents, kwargs)
cls._instance = None
return cls
def __call__(cls, *args, **kwargs):
if not cls._instance:
inst = cls.__new__(cls, *args, **kwargs)
inst.__init__(*args, **kwargs)
cls._instance = inst
return cls._instance
else:
raise SingletonError("Cannot initialize multiple singletons.")
class Logger(object, metaclass = Singleton):
def __new__(cls, *logging_args, **logging_kwargs):
self = super(Logger, cls).__new__(cls)
logging_args_dict = {'log%i' % pos : i for pos, i in enumerate(logging_args, 1)}
kwargs = dict(logging_args_dict, **logging_kwargs)
self.__dict__ = kwargs
return self
log = Logger()
나는 당신이 싱글을 다시 초기화 할 수 있도록이 다시 없음으로 Logger._instance을 설정하려는 로그 삭제할
. 어떻게해야합니까?
'del'은 객체를 삭제하지 않기 때문에 객체를 가리키는 * name *을 삭제할 수 없습니다. – BrenBarn
http://docs.python.org/2/reference/datamodel.html#object.__del__ –
좋아요, 제가 직면 한 시나리오와 왜이 질문을 제기 한 이유를 포함하여 질문을 편집했습니다. – user3002473