亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

請問為什么是這樣的報錯?怎樣嵌入函數實現需求?

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)

正在回答

4 回答

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(Student,se,s):
????????if?se.name>s.name:
????????????return?1
????????elif?se.name<s.name:
????????????return?-1
????????else:
????????????return?0
?
????def?__cmp__(self,?s):
????????if?self.score>s.score:
????????????return?1
????????elif?self.score<s.score:
????????????return?-1
????????else:
????????????return?Student._cmp_name(self,s)
?
L?=?[Student('Tim',?99),?Student('Bob',?88),?Student('Alice',?99)]
print?sorted(L)

#[(Bob:?88),?(Alice:?99),?(Tim:?99)]

錯誤 1?def?_cmp_name(Student,se,s):第一個參數必須是類名

? ? ? ? 2. 忘了return

1 回復 有任何疑惑可以回復我~

你定義的classmethod:?

?def?_cmp_name(se,s):

????????if?se.name>s.name:

此處的se其實就是Student,你可以print下。

而你用Student.name---->出錯。name寫在函數內,是實例屬性。


0 回復 有任何疑惑可以回復我~

類方法無法獲得實例屬性,name不是全局的,所以se.name會有錯

1 回復 有任何疑惑可以回復我~


>>> 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)


0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
python進階
  • 參與學習       255563    人
  • 解答問題       3038    個

學習函數式、模塊和面向對象編程,掌握Python高級程序設計

進入課程

請問為什么是這樣的報錯?怎樣嵌入函數實現需求?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號