특정 조건을 충족하면서 동적으로 업데이트되는 클래스 인스턴스 목록을 만드는 방법은 무엇입니까?(파이썬)
-
13-12-2019 - |
문제
인스턴스 속성의 특정 조건에 따라 자동으로 업데이트되는 클래스 인스턴스 목록을 만들고 싶습니다.
예를 들어, 사용자 정의 클래스인 Person()의 개체 목록이 있고 항상 모든 결혼한 사람을 포함하는 목록을 생성할 수 있기를 원합니다.'MAR_STATUS' 속성이 'MARRIED'와 동일한 모든 사람.
파이썬에서는 이것이 가능합니까?저는 이 작업을 정확하게 수행하는 "actor_set"이라는 매우 편리한 내장 기능이 있는 마이크로 시뮬레이션용 C++ 사전 컴파일러를 사용했습니다.하지만 C++에서 어떻게 구현되었는지는 전혀 모르겠습니다.
감사합니다.
해결책
목록 이해 :
[person for person in people if person.MAR_STATUS == 'MARRIED']
.
변수에 할당하고 해당 변수가 모든 액세스에 대해 자동으로 업데이트 할 필요가있는 경우, 람다, 정상적인 기능, 변수가 클래스 멤버 인 경우이 동일한 코드를속성 getter.
다른 팁
거리가 매우 신중하게 제어되지 않는 한 "거리"/ 돌연변이 / 부작용을 갖는 것이 좋지 않습니다.
, 당신이 정말로 원한다면, 당신이 이것을 할 수 있다고 말하면서, 명령 할 수 있습니다.여기서 Python의 [ 속성 getter 및 setters ]를 사용합니다.
MARRIED_SET = set()
def updateMarriedSet(changedPerson):
if hasattr(changedPerson,'married') and changedPerson.married==Person.MARRIED:
MARRIED_SET.add(changedPerson)
else:
MARRIED_SET.discard(changedPerson)
class Person(object):
...
@property
def married(self):
"""The person is married"""
return self._married
@married.setter
def married(self, newStatus):
self._married = newStatus
updateMarriedSet(self)
@married.deleter
def married(self):
del self._married
updateMarriedSet(self)
.
I 상상할 수 있습니다. 아마도 GetMarriedPeople ()에 대한 액세스가 aroredized o (1) 시간이 아닌 O (1) 시간에 실행되는 것이 유용 할 수 있습니다.
제휴하지 않습니다 StackOverflow