我想创建一个类实例列表,它们会根据实例属性的特定条件自动更新。
例如,我有一个自定义类Person()的对象列表,我希望能够生成一个总是包含所有已婚人员的列表,即所有具有'MAR_STATUS'属性等于'MARRIED'的人”。
这在Python中是否可行?我使用了一个C ++预编译器进行微程序设计,它有一个非常方便的内置程序叫做“actor_set”,它就是这样做的。但我不知道它是如何在C ++中实现的。
谢谢。
答案 0 :(得分:4)
列表理解:
[person for person in people if person.MAR_STATUS == 'MARRIED']
如果需要将其分配给变量,并且希望该变量在每次访问时自动更新,则可以将相同的代码放在lambda,普通函数中,或者,如果您的变量是类成员,则将其放在物业吸气剂。
答案 1 :(得分:2)
除非经过非常谨慎的控制,否则“远距离行动”/突变/副作用是不好的形式。
那就是说,如果你真的想要,命令式语言会让你这样做,如下所示。这里我们使用python的[property getters and 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)时间有用。
答案 2 :(得分:0)