본문 바로가기
파이썬

파이썬 클래스의 모든 인스턴스 인쇄

by º기록 2020. 11. 16.
반응형

Python의 클래스를 사용하여 함수에 정의 된 형식으로 클래스의 모든 단일 인스턴스를 인쇄하는 함수를 어떻게 정의합니까?

 

해결 방법

 

이 경우 두 가지 옵션이 있습니다.

import gc
for obj in gc.get_objects():
    if isinstance(obj, some_class):
        dome_something(obj)

이것은 많은 오브젝트가있을 때 매우 느리다는 단점이 있지만 제어 할 수없는 유형에서 작동합니다.

from collections import defaultdict
import weakref

class KeepRefs(object):
    __refs__ = defaultdict(list)
    def __init__(self):
        self.__refs__[self.__class__].append(weakref.ref(self))

    @classmethod
    def get_instances(cls):
        for inst_ref in cls.__refs__[cls]:
            inst = inst_ref()
            if inst is not None:
                yield inst

class X(KeepRefs):
    def __init__(self, name):
        super(X, self).__init__()
        self.name = name

x = X("x")
y = X("y")
for r in X.get_instances():
    print r.name
del y
for r in X.get_instances():
    print r.name

이 경우 모든 참조는 목록에 약한 참조로 저장됩니다. 많은 인스턴스를 자주 생성하고 삭제하는 경우 반복 후 weakref 목록을 정리해야합니다. 그렇지 않으면 많은 엉망이 될 것입니다.

이 경우 또 다른 문제는 기본 클래스 생성자를 호출해야한다는 것입니다. __ new __ 를 재정의 할 수도 있지만 첫 번째 기본 클래스의 __ new __ 메서드 만 인스턴스화에 사용됩니다. 이것은 또한 사용자가 제어하는 ​​유형에서만 작동합니다.

편집 : 특정 형식에 따라 모든 인스턴스를 인쇄하는 방법은 연습으로 남겨 두지 만 기본적으로 for 루프의 변형 일뿐입니다.

 

참조 페이지 https://stackoverflow.com/questions/328851

 

 

반응형

댓글