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

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

定義調用問題:為什么set方法不起作用。1.一個@classmethod下,set在get后,不行;set在get前,可行。2.分別類定義set和get,可行。

class Animal(object):

? ? __count=0

? ? def __init__(self,name,age):

? ? ? ? ?self.name=name

? ? ? ? ?self.age=age


? ? @classmethod

? ??

? ? def get_count(cls):

? ? ? ? return cls.__count

? ? def set_count(cls,count):

? ? ? ? cls.__count=count

? ? ? ??

Leo=Animal('herman',22)

print('name:{}\nage:{}'.format(Leo.name,Leo.age))


print('init count:',Leo.get_count())


Leo.set_count(98)

print('changed count:',Leo.get_count())



正在回答

3 回答

實例本身無count,get_count定義的是類方法,因此Leo.get_count()返回Animal的私有屬性__count=0,set_count是實例方法對類無效,因此獲取的__count 還是原本的0.

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

@classmethod 用于標識緊接著它的那一個方法

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

? ? @classmethod

? ? def get_count(cls):

? ? ? ? return cls.__count

? ? ? ?

? ? @classmethod ? ?

? ? def set_count(cls,count):

? ? ? ? cls.__count=count


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

hermaniu 提問者

謝謝你的回答,這是我說的第二種方式,分別定義。為什么單獨定義一個classmethod標識符,然后再定義兩個函數,先后會有區別
2021-11-19 回復 有任何疑惑可以回復我~
#2

weixin_慕圣9105026 回復 hermaniu 提問者

這樣的話比如get方法在classmethod下,會作為類的方法,而set方法會作為實例的方法,set更改之后的并不是類中的count,所以你獲取的仍然是最初的
2023-06-09 回復 有任何疑惑可以回復我~
#3

weixin_慕圣9105026 回復 hermaniu 提問者

相反,count是類中的變量,所以set作為類的方法將count值更改,get也只能獲取的是類中唯一的count值,也就是你set更改的
2023-06-09 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

定義調用問題:為什么set方法不起作用。1.一個@classmethod下,set在get后,不行;set在get前,可行。2.分別類定義set和get,可行。

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

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

幫助反饋 APP下載

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

公眾號

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