1洼专、實例屬性
實例屬性棒掠,就是賦給由類創(chuàng)建的實例的屬性,實例屬性屬于它所屬的實例屁商,不同實例之間的實例屬性可以不同烟很。
例:設置實例屬性
由于p2實例中沒有設置過name屬性,因此當Python解釋器執(zhí)行到這行代碼時,會拋出屬性錯誤異常雾袱。由此可以看出恤筛,每個實例之間的屬性是分別獨立的,屬性之間不能共享芹橡。
例:通過__init__()方法設置實例屬性
當創(chuàng)建實例時毒坛,會自動調用__init__()方法,通過該方法為屬性賦值林说。
通過上述方式設置的實例屬性都可以被外部訪問煎殷,但是在實際開發(fā)中,可能一些屬性不需要被外部訪問腿箩,就需要控制實例屬性的訪問權限豪直。
Python中,屬性的訪問權限是由屬性名控制的度秘,如果一個屬性由雙下劃線(__)開頭顶伞,該屬性就無法被外部訪問。如果外部需要訪問這種變量剑梳,可以通過特定的實例方法來訪問唆貌。
例:屬性訪問控制權限
因為__address屬性外部無法訪問,因此Python解釋器執(zhí)行到這段代碼時垢乙,會拋出屬性錯誤異常锨咙。
2、類屬性
在類中直接定義的屬性被稱之為類屬性追逮,與實例屬性不同的是酪刀,類屬性會在所有的實例對象中共享。類屬性有且只有1份钮孵,創(chuàng)建的實例都會繼承自唯一的類屬性骂倘,如果在類上綁定一個屬性,那么所有的實例都可以訪問類屬性巴席,且訪問的類屬性是同一個历涝,一旦類屬性改變就會影響到所有的實例。
例:設置類屬性
類屬性在實例之間共享漾唉,因此類創(chuàng)建的實例都可以訪問到類屬性荧库。
例:實例對象修改類屬性
3、實例屬性與類屬性重名
例:當實例屬性與類屬性重名時赵刑,實例屬性優(yōu)先級更高
4分衫、實例方法
在類中,定義的普通方法都是實例方法般此。實例方法隱含的參數(shù)為類實例self蚪战。實例方法只能被實例調用牵现。
例:定義實例方法
例:類對象調用實例方法
5、類方法
Python中邀桑,再類中定義類方法施籍,需要在方法上加上@classmethod裝飾器,同時方法中傳入cls作為參數(shù)概漱,代表當前的類對象,類方法中喜喂,可以訪問當前類中的類屬性瓤摧,但是不能訪問實例屬性。
6、靜態(tài)方法
例:定義靜態(tài)方法
靜態(tài)方法可以通過實例對象調用进副,也可以通過類對象調用这揣。
例:靜態(tài)方法訪問類屬性與實例屬性
總結
實例方法(普通方法)———————————————————————? 隨著實例屬性的改變而改變
類方法(無論是類調用還是實例調用)———————————————? 都是類屬性的值,不隨實例屬性的變化而變化
靜態(tài)方法 ——————————————————————————————? 不可以訪問類屬性影斑,故直接輸出傳入方法的值