python 实例变量_Python的类变量和实例变量详解
Asuka
什么是類變量?
class Student:
name = 'Asuka'
age = '18'
...
上面定義的name和age就是類變量
什么是實(shí)例變量?
class Student:
def __init__(self,name,age)
self.name = name
self.age = age
...
上面定義的name和age就是實(shí)例變量
類變量和實(shí)例變量的區(qū)別和應(yīng)用
類變量為所有實(shí)例化后的類共享,有點(diǎn)類似繼承的概念,實(shí)例化后,每個(gè)實(shí)例都會(huì)有這個(gè)屬性,有種default的意味,可以設(shè)置一個(gè)帶默認(rèn)值的屬性.
實(shí)例變量為每個(gè)實(shí)例化后的類獨(dú)有,因?yàn)閜ython類實(shí)例化之后會(huì)自動(dòng)調(diào)用init方法,如果您在類里面定義了相同的屬性,那么init下的實(shí)例變量會(huì)重寫(xiě)相同的類變量.
一般來(lái)說(shuō),我們更多的運(yùn)用實(shí)例變量,因?yàn)榘凑諊?yán)格的面向?qū)ο笏枷?類的所有屬性都應(yīng)該是實(shí)例的,類變量根本就不應(yīng)該存在的,不過(guò)類變量偶爾還是有一點(diǎn)用處的,比如設(shè)置默認(rèn)值和常量.
關(guān)于dict的說(shuō)明
大家在序列化類,比如轉(zhuǎn)成json格式,許多同學(xué)會(huì)想到先把類轉(zhuǎn)成dict,然后再轉(zhuǎn)成json.于是,同學(xué)們可能會(huì)考慮用dict.
我想告訴同學(xué)們的一句話是,使用dict方法只能序列化實(shí)例變量,無(wú)法序列化類變量.
如何寫(xiě)出一個(gè)優(yōu)美的面向?qū)ο蟮念?/p>
下面這句是關(guān)鍵
類應(yīng)該保存描述自身的特點(diǎn)和能夠?qū)崿F(xiàn)的行為.
1.盡量多使用實(shí)例變量,不要總想把類里面的資源return到外部
2.類下面的函數(shù)應(yīng)該有操作實(shí)例變量的行為,也就是通常所說(shuō)的方法
3.類里面不能只有staticmethod,classmethod這類的方法,因?yàn)檫@些還是面向過(guò)程的思維,不要一步步想著寫(xiě)方法,根本沒(méi)用到自己實(shí)例的屬性
4.面向?qū)ο蟮乃季S其實(shí)就是一種造物主的思維,我們思考問(wèn)題的時(shí)候要有一些靈性,少了什么,我們就直接創(chuàng)造一個(gè)出來(lái)就行了,別和解數(shù)學(xué)題一樣,總是在想求解方程中x,y,z等于什么.
如果大家有過(guò)python web編程經(jīng)驗(yàn)的話,就和編寫(xiě)視圖函數(shù)是一樣的,我們編寫(xiě)視圖函數(shù)的時(shí)候總是會(huì)事先假象我們有驗(yàn)證層,模型層,視圖模型層等等分層,我們先定好整體的邏輯,事后再補(bǔ)齊對(duì)應(yīng)層的函數(shù),就和造物主有點(diǎn)類似,少了什么我們直接new一個(gè)就行了(為什么不能new一個(gè)對(duì)象出來(lái)呢?).
視圖函數(shù)內(nèi)部總是會(huì)實(shí)例化一些驗(yàn)證實(shí)例(wtforms),模型實(shí)例(sqlalchemy),業(yè)務(wù)邏輯等等內(nèi)容,這些內(nèi)容本來(lái)都是不存在的,都是我們?cè)谄渌胤蕉x好的類或者函數(shù),卻直接在視圖函數(shù)中用上來(lái)了.
Python 3.7的dataclass
from dataclasses import dataclass
@dataclass
class Student:
name:str
age:int
...
python 3.7版本中加了一個(gè)令人激動(dòng)的dataclass裝飾器,簡(jiǎn)單的實(shí)現(xiàn)類比上面,如果同學(xué)們比較反感編寫(xiě)構(gòu)造函數(shù)時(shí)候要編寫(xiě)大量重復(fù)的代碼,可以嘗試下dataclass裝飾器.
這個(gè)裝飾器,不僅僅是簡(jiǎn)寫(xiě)代碼,直觀顯示數(shù)據(jù)類型,還可以進(jìn)行數(shù)據(jù)比較,創(chuàng)建不可變屬性,使用post_init預(yù)處理變量等等好處.
如果想要更詳細(xì)了解這個(gè)新功能的細(xì)節(jié),可以看下這篇文章--->https://linux.cn/article-9974-1.html
最后的留言
如果大家有什么疑問(wèn),可以在下方留言或者私信我,看到我會(huì)回復(fù)的(就是很難及時(shí)回復(fù)了).
如果我上面說(shuō)的有什么錯(cuò)誤,歡迎大家指正我(杠起來(lái)).
這是我的個(gè)人站點(diǎn)——一路香蕉皮,有興趣可以點(diǎn)擊查看下,里面有軟件,教程,圖片福利分享
總結(jié)
以上是生活随笔為你收集整理的python 实例变量_Python的类变量和实例变量详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python小课文件_[Python]小
- 下一篇: python3.8安装pygame_Py