python - Add attribute to class list to return all objects with specific attribute -
i have next problem:
let's set scene!
say have class person few basic attributes:
class person(object): def __init__(self, name=none, gender=none, single=none): self.name=name self.gender=gender self.single=single and create list class called dating, hold person objects
class dating(object): def __init__(self): self.members=[] my_people=dating() my_people.members.append(person("jack","male",false)) my_people.members.append(person("jill","female",true)) my_people.members.append(person("george","male",true)) my_people.members.append(person("sandy","female",false)) right, problem?
is possible assign attribute list class access single members of my_people list creating sort of attribute like:
my_people.members.singles so homecoming list of person objects have single == true attribute?
thanks help. (by way, have got little previous experience python)
to add together attributes that, you'd have subclass list type:
class filterablelist(list): def __getattr__(self, name): # assume non-existing attributes boolean filters homecoming [elem elem in self if getattr(elem, name)] note not flexible; true values found way. can give attribute names more meaning, usually you'd want on dating class anyway , utilize methods filter info more expressively.
demo:
>>> class person(object): ... def __init__(self, name, gender, single): ... self.name=name ... self.gender=gender ... self.single=single ... def __repr__(self): ... homecoming 'person({name!r}, {gender!r}, {single!r})'.format(**vars(self)) ... >>> class filterablelist(list): ... def __getattr__(self, name): ... # assume non-existing attributes boolean filters ... homecoming [elem elem in self if getattr(elem, name)] ... >>> members = filterablelist([person("jack","male",false), person("jill","female",true), person("george","male",true), person("sandy","female",false)]) >>> members [person('jack', 'male', false), person('jill', 'female', true), person('george', 'male', true), person('sandy', 'female', false)] >>> members.single [person('jill', 'female', true), person('george', 'male', true)] python list class filter attributes
No comments:
Post a Comment