반응형
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
반응형
'파이썬' 카테고리의 다른 글
파이썬 Python 용 Stanford NLP (0) | 2020.11.16 |
---|---|
파이썬의 튜플에서 정수를 어떻게 얻습니까? (0) | 2020.11.16 |
파이썬 다중 처리 : 클래스에 정의 된 함수에서 Pool.map을 사용하는 방법은 무엇입니까? (0) | 2020.11.15 |
파이썬 오프셋 롤 포워드 후 월 오프셋 추가 후 pandas 범위를 벗어난 나노초 타임 스탬프 (0) | 2020.11.15 |
파이썬 Python에서 null 개체 참조 (0) | 2020.11.15 |
댓글