有關類的公有屬性的介紹
一、概念
我們前面提到類別的私有屬性,也就是類別中不能直接存取的。但是不是可以直接存取的屬性就是公有屬性呢?其實也不是。在__init__()建構函式中的屬性,對外基本上都可以訪問,但是他們並不是公有屬性。那什麼叫公有屬性呢?
定義: 指的是所屬這個類別的所有對象,都可以存取的屬性,叫做公有屬性。
二、屬性
2.1 成員屬性
class Person(object): def __init__(self, name, job, phone, address): self.name = name # 成员属性,属于某个实例对象 self.job = job self.phone = phone self.__address = address def get_private(self): return self.__address def sayhi(self): print("hell,%s" % self.name) p1 = Person('Bigberg', 'Doctor', '8833421', 'hz') p2 = Person('Ashlex', 'Police', '8833232', 'bj')
print(p1.job, p2.job) # 输出 Doctor Police
我們在Person類別下定義了兩個對象,p1和p2。很顯然我們沒有辦法讓p1來存取p2 的job屬性,也就是Police。那麼在建構子__init__()中的self.name等屬性,稱為 成員屬性。
2.2 公有屬性
class Person(object): nationality = 'CN' # 定义公有属性 def __init__(self, name, job, phone, address): self.name = name self.job = job self.phone = phone self.address = address def sayhi(self): print("hell,%s" % self.name) p1 = Person('Bigberg', 'Doctor', '8833421', 'hz') p2 = Person('Ashlex', 'Police', '8833232', 'bj') print(p1.nationality) print(p2.nationality) # 输出 CN CN
公有屬性而言,所有實例物件存取它所得到的值是一樣的。
三、公有屬性的特性
我們不僅可以訪問,還能改變公有屬性。
class Person(object): nationality = 'CN' # 定义公有属性 def __init__(self, name, job, phone, address): self.name = name self.job = job self.phone = phone self.address = address def sayhi(self): print("hell,%s" % self.name) p1 = Person('Bigberg', 'Doctor', '8833421', 'hz') p2 = Person('Ashlex', 'Police', '8833232', 'bj') print(Person.nationality) # 调用 公有属性 Person.nationality = 'us' # 改变 公有属性 print(Person.nationality) #输出 CN us
#3.1 單一實例呼叫與改變公有屬性
# 依据上例 print("--------Befoer change---------") print(Person.nationality) print(p1.nationality) print(p2.nationality) print("--------after change---------") print(Person.nationality) p1.nationality = 'JP' print(p1.nationality) print(p2.nationality) # 输出
---- ----Befoer change---------
CN
CN
CN
--------after change---------
US
JP
US
p1在修改之前我們可以很好理解,因為大家都是呼叫的類別Person的公有屬性nationality,所以p1、p2的國籍屬性是一樣的,都是'CN'。但是為什麼在p1修改過公有屬性後,p2的國籍屬性沒有改變呢?
在我們定義一個Person類別的時候,其實在記憶體中就已經存在了,當然也包含了這個類的公有屬性。在最初實例p1去呼叫類別Person的nationality這個屬性時,是直接引用類別當中nationality的記憶體位址,而不是自己新增一個屬性叫nationality。
這就可以解釋為什麼在Person類別中的nationality改變為 'US' 時,p2也跟著改變。因為是直接引用記憶體當中的值。
print(id(Person.nationality)) print(id(p1.nationality)) print(id(p2.nationality)) print(Person.nationality, p1.nationality, p2.nationality) #输出 1751236836128 1751236836128 1751236836128 CN CN CN
在p1直接賦值nationality這個屬性後,其實就實例p1為自己新增了一個成員變量,叫做nationality。只是他們的名稱相同而已,但是兩者之 間並沒有聯繫,甚至內存地址也不相同。
p1.nationality = 'JP'
所以p1.nationality='JP',並沒有修改類別Person的公有屬性,而是為自己創造了一個新的成員屬性,因此p1的改變對類別的公有屬性沒有影響。
以上是有關類的公有屬性的介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

要獲得intliteral屬性而不是語法錯誤,請使用空格或括號。intliteral是Python中NumericLiterals的一部分。NumericLiterals還包括以下四種不同的數字類型-int(有符號整數) - 它們通常被稱為整數或整數,是正數

Gson@SerializedName註解可以序列化為JSON,並將提供的名稱值作為其欄位名稱。此註解可以覆寫任何FieldNamingPolicy,包括可能已在Gson實例上設定的預設欄位命名策略。可以使用GsonBuilder類別來設定不同的命名策略。語法@Retention(value=RUNTIME)@Target(value={FIELD,METHOD})public@interfaceSerializedName範例importcom.google.gson.annotations.*;

Python的dir()函數:查看物件的屬性和方法,需要具體程式碼範例摘要:Python是一種強大而靈活的程式語言,其內建函數和工具為開發人員提供了許多方便的功能。其中一個非常有用的函數是dir()函數,它允許我們查看一個物件的屬性和方法。本文將介紹dir()函數的用法,並透過具體的程式碼範例來示範其功能和用途。正文:Python的dir()函數是一個內建函數,

Win11磁碟屬性未知怎麼辦?近期Win11用戶在電腦的使用中,發現系統出現提示磁碟錯誤的情況,這是怎麼回事?而且該如何解決呢?很多小夥伴不知道怎麼詳細操作,小編下面整理了Win11磁碟出錯的解決步驟,如果你有興趣的話,跟著小編一起往下看看吧! Win11磁碟出錯的解決步驟1、首先,按鍵盤上的Win+E組合鍵,或點選工作列上的檔案總管; 2、檔案總管的右側邊欄,找到邊右鍵點選本機磁碟(C :),在開啟的選單項目中,選擇屬性; 3、本機磁碟(C:)屬性窗口,切換到工具選

CSS中bottom屬性語法及程式碼範例在CSS中,bottom屬性用於指定一個元素與容器底部之間的距離。它可以控制一個元素相對於其父元素底部的位置。 bottom屬性的語法如下:element{bottom:value;}其中,element表示要套用該樣式的元素,value表示要設定的bottom值。 value可以是一個具體的長度值,例如像素

如果您想要取得文件從視窗左上角捲動到的像素,請使用pageXoffset和pageYoffset屬性。對水平像素使用pageXoffset。範例您可以嘗試執行以下程式碼來了解如何在JavaScript中使用pageXOffset屬性-現場示範<!DOCTYPEhtml><html> <head> <style> &

絕望線縷是暴雪娛樂旗下佳作《爐石戰記》中的一張稀有卡牌,在「威茲班的工坊」卡包中有機會獲得。可消耗100/400點奧術之塵合成普通/金色版本。爐石戰記絕望線縷屬性介紹答:在威茲班的工坊卡包中有幾率獲得,也可以透過奧術之塵合成。稀有度:稀有類型:法術職業:死亡騎士法力值:1效果:使所有隨從獲得亡語:對所有隨從造成1點傷害

使用Vue.set函數實作動態新增屬性的方法和範例在Vue中,如果我們想要動態地新增一個屬性到一個已經存在的物件上,通常會使用Vue.set函數來實作。 Vue.set函數是Vue.js提供的一個全域方法,它能夠在新增屬性時保證響應式更新。本文將介紹Vue.set的使用方法,並提供一個具體的範例。首先,在Vue中,我們通常會使用data選項來宣告響應式的資料。
