Fil*_*lip 14 python attributes class python-3.x
这是我到目前为止编写的代码,程序的要点是从文件中读取20个人然后为其分配属性,然后从用户给出的输入中标准化它们的值.
class One:
def __init__(self):
self.attrOne = ()
self.attrTwo = ()
self.attrThree = ()
self.attrFour = ()
self.attrFive= ()
self.attrSix = ()
self.attrSeven = ()
self.attrEight = ()
self.attrNine = ()
class Two:
def __init__(self):
self.allPersons = []
def importFromList(self, filename):
file= open(filename, "rU")
for line in file:
partOfList = line.split()
x = Partner()
x.attrOne = partOfList[0]
x.attrTwo = partOfList[1]
x.attrThree = partOfList[2]
x.attrFour = partOfList[3]
x.attrFive = partOfList[4]
x.attrSix = partOfList[5]
x.attrSeven = partOfList[6]
x.attrEight= partOfList[7]
x.attrNine = partOfList[8]
self.addPerson(x)
file.close()
def addPerson(self, x):
self.allPersons.append(x)
Run Code Online (Sandbox Code Playgroud)
我想知道如何循环遍历allPersons列表中的人员的属性,然后将它们相互比较以找出最大值.这是我到目前为止所尝试的,但我无法让它工作
def getMaxValue(self):
o = One()
for eachPartner in self.allPartners:
maxValuesAttrOne = max(O.attrOne))
Run Code Online (Sandbox Code Playgroud)
所有的帮助将不胜感激,我愿意接受新的解决方案,而且我认为importFromList方法不是最有效的方法,所以如果你有任何反对意见我愿意倾听和学习!
Mar*_*ers 38
max()接受一个key参数,一个函数,当传递其中一个对象时,返回比较它们的值.
使用operator.attrgetter()获得该值:
from operator import attrgetter
max(self.allPartners, key=attrgetter('attrOne'))
Run Code Online (Sandbox Code Playgroud)
这将返回该属性为最大值的匹配对象.如果您只想存储该最大值,您有两种选择:
从返回的对象中获取属性:
max(self.allPartners, key=attrgetter('attrOne')).attrOne
Run Code Online (Sandbox Code Playgroud)仅使用属性传递max()给生成器表达式:
max(p.attrOne for p in self.allPartners)
Run Code Online (Sandbox Code Playgroud)如果您发现需要One一次又一次地使用相同的属性在各个方向上排序(要找到最小值,最大值,排序等等),您可能也想让您的类可以订购.
要做到这一点,你需要实现一些的的基本的定制挂钩的Python会寻找.通过一些额外的技巧,你可以使用低于和等于操作,并使用funtools.total_ordering类装饰器:
from functools import total_ordering
@total_ordering
class One:
# ...
def __lt__(self, other):
if not isinstance(other, type(self)): return NotImplemented
return self.attrOne < other.attrOne
def __eq__(self, other):
if not isinstance(other, type(self)): return NotImplemented
return self.attrOne == other.attrOne
Run Code Online (Sandbox Code Playgroud)
现在你的One课程是可以订购的,完全基于attrOne; 对于该max()函数,这意味着您可以key完全删除参数.
| 归档时间: |
|
| 查看次数: |
14742 次 |
| 最近记录: |