python中的class_static的@classmethod的巧妙用法
python中的class_static的@classmethod的使用 classmethod的使用,主要針對(duì)的是類而不是對(duì)象,在定義類的時(shí)候往往會(huì)定義一些靜態(tài)的私有屬性,但是在使用類的時(shí)候可能會(huì)對(duì)類的私有屬性進(jìn)行修改,但是在沒有使用class method之前對(duì)于類的屬性的修改只能通過對(duì)象來進(jìn)行修改,這是就會(huì)出現(xiàn)一個(gè)問題當(dāng)有很多對(duì)象都使用這個(gè)屬性的時(shí)候我們要一個(gè)一個(gè)去修改對(duì)象嗎?答案是不會(huì)出現(xiàn)這么無腦的程序,這就產(chǎn)生classmethod的妙用。請(qǐng)看下面的代碼:
class Goods: __discount = 0.8 def __init__(self,name,money): self.__name = name self.__money = money @property def price(self): return self.__money*Goods.__discount @classmethod def change(cls,new_discount):#注意這里不在是self了,而是cls進(jìn)行替換 cls.__discount = new_discount apple = Goods('蘋果',5) print(apple.price) Goods.change(0.5) #這里就不是使用apple.change()進(jìn)行修改了 print(apple.price)
上面只是簡(jiǎn)單的列舉了class method的一種使用場(chǎng)景,后續(xù)如果有新的會(huì)持續(xù)更新本篇文章 2.既然@staticmethod和@classmethod都可以直接類名.方法名()來調(diào)用,那他們有什么區(qū)別呢
從它們的使用上來看,
@staticmethod不需要表示自身對(duì)象的self和自身類的cls參數(shù),就跟使用函數(shù)一樣。
@classmethod也不需要self參數(shù),但第一個(gè)參數(shù)需要是表示自身類的cls參數(shù)。
如果在@staticmethod中要調(diào)用到這個(gè)類的一些屬性方法,只能直接類名.屬性名或類名.方法名。
而@classmethod因?yàn)槌钟衏ls參數(shù),可以來調(diào)用類的屬性,類的方法,實(shí)例化對(duì)象等,避免硬編碼。
下面上代碼。
class A(object): bar = 1 def foo(self): print 'foo' @staticmethod def static_foo(): print 'static_foo' print A.bar @classmethod def class_foo(cls): print 'class_foo' print cls.bar cls().foo() ###執(zhí)行 A.static_foo() A.class_foo()
知識(shí)點(diǎn)擴(kuò)展:python classmethod用法
需求:添加類對(duì)象屬性,在新建具體對(duì)象時(shí)使用該變量
class A(): def __init__(self,name): self.name = name self.config = {'batch_size':A.bs} @classmethod def set_bs(cls,bs): cls.bs = bs def print_config(self): print (self.config) A.set_bs(4) a = A('test') a.print_config()
以上就是python中的class_static的@classmethod的使用的詳細(xì)內(nèi)容,更多關(guān)于python classmethod使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python標(biāo)準(zhǔn)庫(kù)中內(nèi)置裝飾器@staticmethod和@classmethod
- Python中通過@classmethod 實(shí)現(xiàn)多態(tài)的示例
- 詳解Python中@staticmethod和@classmethod區(qū)別及使用示例代碼
- Python 類方法和實(shí)例方法(@classmethod),靜態(tài)方法(@staticmethod)原理與用法分析
- python @classmethod 的使用場(chǎng)合詳解
- 對(duì)Python中的@classmethod用法詳解
- Python類方法@classmethod()的具體使用
相關(guān)文章
Pandas 數(shù)據(jù)框增、刪、改、查、去重、抽樣基本操作方法
下面小編就為大家分享一篇Pandas 數(shù)據(jù)框增、刪、改、查、去重、抽樣基本操作方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04Python中sorted()函數(shù)的強(qiáng)大排序技術(shù)實(shí)例探索
排序在編程中是一個(gè)基本且重要的操作,而Python的sorted()函數(shù)則為我們提供了強(qiáng)大的排序能力,在本篇文章中,我們將深入研究不同排序算法、sorted()?函數(shù)的靈活性,以及各種排序場(chǎng)景下的最佳實(shí)踐2024-01-01Windows下創(chuàng)建定時(shí)任務(wù)執(zhí)行Python腳本的方法實(shí)現(xiàn)
Python定時(shí)任務(wù)執(zhí)行,本文主要介紹了Windows下創(chuàng)建定時(shí)任務(wù)執(zhí)行Python腳本的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11Python機(jī)器學(xué)習(xí)NLP自然語言處理基本操作之命名實(shí)例提取
自然語言處理(?Natural?Language?Processing,?NLP)是計(jì)算機(jī)科學(xué)領(lǐng)域與人工智能領(lǐng)域中的一個(gè)重要方向。它研究能實(shí)現(xiàn)人與計(jì)算機(jī)之間用自然語言進(jìn)行有效通信的各種理論和方法2021-11-11Python采集天天基金數(shù)據(jù)掌握最新基金動(dòng)向
這篇文章主要介紹了Python采集天天基金數(shù)據(jù)掌握最新基金動(dòng)向,本次案例實(shí)現(xiàn)流程為發(fā)送請(qǐng)求、獲取數(shù)據(jù)、解析數(shù)據(jù)、多頁爬取、保存數(shù)據(jù),接下來來看看具體的操作過程吧2022-01-01