請問為什么是這樣的報錯?怎樣嵌入函數實現需求?
class?Student(object): ????def?__init__(self,?name,?score): ????????self.name?=?name ????????self.score?=?score ????def?__str__(self): ????????return?'(%s:?%s)'?%?(self.name,?self.score) ????__repr__?=?__str__ ????@classmethod ????def?_cmp_name(se,s): ????????if?se.name>s.name: ????????????return?1 ????????elif?se.name<s.name: ????????????return?-1 ????????else: ????????????0 ????def?__cmp__(self,?s): ????????if?self.score>s.score: ????????????return?1 ????????elif?self.score<s.score: ????????????return?-1 ????????else: ????????????Student._cmp_name(self,s) L?=?[Student('Tim',?99),?Student('Bob',?88),?Student('Alice',?99)] print?sorted(L)
Traceback (most recent call last):
?File "./6251/1paK/index.py", line 29, in
? ?print sorted(L)
?File "./6251/1paK/index.py", line 26, in __cmp__
? ?Student._cmp_name(self,s)
TypeError: _cmp_name() takes exactly 2 arguments (3 given)
2015-11-06
錯誤 1?def?_cmp_name(Student,se,s):第一個參數必須是類名
? ? ? ? 2. 忘了return
2015-07-09
你定義的classmethod:?
?def?_cmp_name(se,s):
????????if?se.name>s.name:
此處的se其實就是Student,你可以print下。
而你用Student.name---->出錯。name寫在函數內,是實例屬性。
2015-05-26
類方法無法獲得實例屬性,name不是全局的,所以se.name會有錯
2015-04-01
>>> sorted(L)
[88, 98, 99]
>>> cmp (90,80)
1
>>>
# 需求是實現(本網站由原文)
class Student(object):
? ? def __init__(self, name, score):
? ? ? ? self.name = name
? ? ? ? self.score = score
? ? def __str__(self):
? ? ? ? return '(%s: %s)' % (self.name, self.score)
? ? __repr__ = __str__
? ? def __cmp__(self, s):
? ? ? ? if self.score == s.score:
? ? ? ? ? ? return cmp(self.name, s.name) ?
? ? ? ? return -cmp(self.score, s.score)
L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 99)]
print sorted(L)