目錄
一、概念" >一、概念
二、屬性" >二、屬性
2.1 成員屬性" >2.1 成員屬性
2.2 公有屬性" >2.2 公有屬性
三、公有屬性的特性  " >三、公有屬性的特性  
#3.1 單一實例呼叫與改變公有屬性" >#3.1 單一實例呼叫與改變公有屬性
首頁 後端開發 Python教學 有關類的公有屬性的介紹

有關類的公有屬性的介紹

Jul 17, 2017 pm 03:58 PM
公有 屬性

一、概念

  我們前面提到類別的私有屬性,也就是類別中不能直接存取的。但是不是可以直接存取的屬性就是公有屬性呢?其實也不是。在__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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

如何在Python中取得整數位面量屬性而不是SyntaxError? 如何在Python中取得整數位面量屬性而不是SyntaxError? Aug 20, 2023 pm 07:13 PM

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

如何在Java中使用Gson重命名JSON的屬性? 如何在Java中使用Gson重命名JSON的屬性? Aug 27, 2023 pm 02:01 PM

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

Python的dir()函數:查看物件的屬性和方法 Python的dir()函數:查看物件的屬性和方法 Nov 18, 2023 pm 01:45 PM

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

Win11磁碟屬性未知怎麼辦 Win11磁碟屬性未知怎麼辦 Jul 03, 2023 pm 04:17 PM

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

CSS中bottom屬性語法 CSS中bottom屬性語法 Feb 21, 2024 pm 03:30 PM

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

pageXOffset屬性在JavaScript中的作用是什麼? pageXOffset屬性在JavaScript中的作用是什麼? Sep 16, 2023 am 09:17 AM

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

爐石戰記絕望線縷屬性介紹 爐石戰記絕望線縷屬性介紹 Mar 20, 2024 pm 10:36 PM

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

使用Vue.set函數實作動態新增屬性的方法和範例 使用Vue.set函數實作動態新增屬性的方法和範例 Jul 24, 2023 pm 07:22 PM

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

See all articles