如果這些NOM的是獨特的鑰匙,你曾經打算做的一切就是用這種獨特的鍵,你確實應該寧可使用字典訪問的人。
但是,如果你想添加更多的屬性,如果你希望能夠通過任何這些屬性來檢索一個或一個以上的人,你可能會想要去一個更復雜的解決方案:
class Example():
def __init__(self):
self.__pList = []
def addPerson(self,name,number):
self.__pList.append(Person(name,number))
def findPerson(self, **kwargs):
return next(self.__iterPerson(**kwargs))
def allPersons(self, **kwargs):
return list(self.__iterPerson(**kwargs))
def __iterPerson(self, **kwargs):
return (person for person in self.__pList if person.match(**kwargs))
class Person():
def __init__(self,name,number):
self.nom = name
self.num = number
def __repr__(self):
return "Person('%s', %d)" % (self.nom, self.num)
def match(self, **kwargs):
return all(getattr(self, key) == val for (key, val) in kwargs.items())
因此,讓我們假設我們有一個麥克和兩個Dave的
a = Example()
a.addPerson('dave',123)
a.addPerson('mike',345)
a.addPerson('dave',678)
的數量現在,你可以找到人:
>>> a.findPerson(num=345)
Person('mike', 345)
或名稱:
>>> a.allPersons(nom='dave')
[Person('dave', 123), Person('dave', 678)]
或兩項:
>>> a.findPerson(nom='dave', num=123)
Person('dave', 123)
在'self.pList.append(人(個體經營,名稱,編號))','self'切不可的一個參數。它在'Person.__ init __()'的定義中沒有問題,但它代表了新創建的'Person'實例。你也不會在'a = Example()'中看到它。 – flow 2011-03-03 12:38:43