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