摘要:放假歸來一概念類對象類名實例對象通過類創建的對象類屬性類對象所擁有的屬性。但是類本身的數據屬性沒有受到影響,仍存在類域中,可以通過類屬性訪問。因為相同名稱的實例屬性將屏蔽掉類屬性。
放假歸來 ~~~
類對象:類名
實例對象:通過類創建的對象
類屬性:類對象所擁有的屬性。歸類所有,被類對象和實例對象所共有。
類的公有屬性可以在類外被訪問。
實例屬性:實例對象所特有的屬性,類對象不能擁有,即不能通過類對象調用。
實例屬性可以放在構造方法__init__()中,也可以在創建實例對象后,進行綁定。
我們通過創建一個學生類來進行說明。
</>復制代碼
class Student1(object):
version = 1.0 # 類的公有數據屬性
__v = 66 # 類的私有數據屬性
# 構造方法里的實例屬性,在類創建實例時自動被調用
def __init__(self ,name,score):
self.name = name
self.score = score
# 類的方法屬性,通過類實例化對象訪問
def updateScore(self,new_score):
self.score = new_score
then,嘗試通過類對象和實例對象來訪問類的公有數據屬性。對于實例沒有而類有的屬性,會繼續查找類的屬性。
</>復制代碼
>>> b = Student1("xlp","100")
>>> Student1.version # 通過類來訪問類的數據屬性
1.0
>>> b.version # 通過類實例訪問類的數據屬性,打印version屬性
1.0 # 因為實例并沒有該屬性,所以會繼續查找class的version屬性
but,當類屬性和實例屬性相同且混用的時候,會出現點問題。
我們先通過類來修改類的數據屬性。修改后,類和實例對象均可訪問。
</>復制代碼
>>>Student1.version += 0.1
>>>Student1.version # 或者b.version
1.1
再通過類實例對象來修改類屬性:
</>復制代碼
>>>b.version += 0.1 # 試圖通過類對象來修改類屬性
>>>b.version # 效果等同于b.version = Student.version + 0.1
1.2 # 由于實例屬性優先級高于類屬性,因此會屏蔽掉類的version屬性 1.1
>>>Student1.version
1.1 # 此時Student.version仍為1.1
其實,在上面實例對象修改類數據屬性時,創建了一個名為version的新實例屬性,覆蓋了類屬性的引用。
但是類本身的數據屬性沒有受到影響,仍存在類域中,可以通過類屬性訪問。
如果將b.version屬性進行刪除del,之后b.version就可以重新訪問類數據屬性了。
</>復制代碼
>>>del b.version # 刪除實例屬性
>>>b.version # 由于實例的version屬性沒有找到,類的屬性就顯示出來了
1.1
所以,實例屬性和類屬性不要使用相同的名字。因為相同名稱的實例屬性將屏蔽掉類屬性。
可以通過實例綁定、訪問實例的屬性,舉例說明:
</>復制代碼
>>> b.name
"xlp"
>>>b.updateSocore(100) # 通過實例訪問類方法屬性
>>>b.score
100
但是,但是,但是,當類數據屬性為可變對象時,比如dict類型,情況又會有點不一樣了。例如:
當類屬性為可變對象時,通過實例對象來修改類屬性時,會修改類屬性,且在刪除實例屬性時會報錯。
所以,使用類對象來修改類屬性,不要使用實例對象來修改類屬性。
? thanks for watching, keep on updating...
點個贊再走吧
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/42619.html
摘要:實例變量與類變量事實上,字段除了獨屬于實例之外,跟普通變量沒有什么差別,所以實例的字段也被稱為實例變量。在類的定義中,與實例變量對應的還有類變量,類變量與實例變量類似,通過操作符來訪問。類變量跟類的方法都可以被稱為類的成員。 該系列文章: 《python入門,編程基礎概念介紹(變量,條件,函數,循環)》 《python中的數據類型(list,tuple,dict,set,None)》...
摘要:類對象被創建時存在于類命名空間內的所有名稱都是有效的屬性名稱。類的實例化,是使用函數表示法,可以把類對象看做是會返回一個新的類實例的函數。這就是可變對象作為類變量時的特性。類變量是所有類的實例共享的屬性和方法,實例變量是每個實例獨有的數據。 Python是面向對象的高級編程語言,在Python里面一切都是對象:數字、字符串、元組、列表、字典、集合等內置數據類型,以及函數、方法、類、模塊...
摘要:時代,如果需要手動繼承,如多態多態是指,不同的子類對象調用相同的父類方法,會產生多態多樣結果的編程特性。 參考:黑馬程序員教程 - Python基礎 面向對象 OOP三大特性,且三個特性是有順序的: 封裝 繼承 多態 封裝 指的就是把現實世界的事務,封裝、抽象成編程里的對象,包括各種屬性和方法。這個一般都很簡單,不需要多講。 唯一要注意的就是:推薦從小往大開始封裝、開發類。比如手槍...
摘要:在類內部的方法中使用時。類的私有方法兩個下劃線開頭,聲明該方法為私有方法,不能在類地外部調用。先在本類中查找調用的方法,找不到才去基類中找。如果在繼承元組中列了一個以上的類,那么它就被稱作多重繼承。 類定義 類對象:創建一個類之后,可以通過類名訪問、改變其屬性、方法 實例對象:類實例化后,可以使用其屬性,可以動態的為實例對象添加屬性(類似javascript)而不影響類對象。 類...
摘要:縮進不一致,會導致運行錯誤。變量變量在使用前必須先定義即賦予變量一個值,否則會報錯數據類型布爾只有和兩個值,表示真或假。 簡介 Python 是一種高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。Python 由 Guido van Rossum 于 1989 年底在荷蘭國家數學和計算機科學研究所發明,第一個公開發行版發行于 1991 年。 特點 易于學習:Python ...
閱讀 1838·2021-11-25 09:43
閱讀 1352·2021-11-22 15:08
閱讀 3763·2021-11-22 09:34
閱讀 3234·2021-09-04 16:40
閱讀 3046·2021-09-04 16:40
閱讀 555·2019-08-30 15:54
閱讀 1344·2019-08-29 17:19
閱讀 1762·2019-08-28 18:13
极致性价比!云服务器续费无忧!
Tesla A100/A800、Tesla V100S等多种GPU云主机特惠2折起,不限台数,续费同价。
NVIDIA RTX 40系,高性价比推理显卡,满足AI应用场景需要。
乌兰察布+上海青浦,满足东推西训AI场景需要