如何创建动态更新的类实例列表,以满足特定条件?(Python)
-
13-12-2019 - |
题
我想创建一个类实例列表,它可以根据实例属性的特定条件自动更新自身。
例如,我有一个自定义类 Person() 的对象列表,我希望能够生成一个始终包含所有已婚人士的列表,即所有属性“MAR_STATUS”等于“已婚”的人。
这在 Python 中可能吗?我使用了一个 C++ 预编译器进行微观模拟,它有一个非常方便的内置函数,名为“actor_set”,它正是这样做的。但我不知道它是如何在C++中实现的。
谢谢。
解决方案
列表理解:
[person for person in people if person.MAR_STATUS == 'MARRIED']
.
如果您需要将其分配给变量,并且希望变量会自动更新每一个访问,则可以将相同的代码放在lambda,正常函数,或者如果您的变量是一个类成员Property Getter。
其他提示
它是较差的形式,以“在距离处的动作”/突变/副作用,除非它非常精心控制。
表示,如果您真的想要,则令人遗憾的语言将让您执行此操作,如下所示。在这里,我们使用python的[属性getters和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)
.
我可以想象这个可能,可能是有用的,可以确保访问getMarriedpeople()在O(1)时间而不是摊销O(1)时间。
不隶属于 StackOverflow