欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python類的私有屬性和公共屬性說明

 更新時間:2022年05月09日 16:54:15   作者:yangjiajia123456  
這篇文章主要介紹了python類的私有屬性和公共屬性說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

python類私有屬性和公共屬性

對于python而言,類的屬性的可見度只有兩種,public和private。

類的私有屬性便是在前面加上“__”標(biāo)識符,而公共屬性則不必。

在類的外面訪問私有屬性會引發(fā)異常。

class Base:
? ? def __init__(self, value):
? ? ? ? self.__value = value
?
b = Base(5)
print(assert b.__value)
?
Traceback (most recent call last):
? File "/Users/yangjiajia/Desktop/project/python/algebra/test.py", line 19, in <module>
? ? print(b.__value)
AttributeError: 'Base' object has no attribute '__value'

屬性被私有化,即使繼承他的字類也不能訪問到。

class Parent:
? ? def __init__(self, value):
? ? ? ? self.__value = value?
?
class Child(Parent):
? ? def get_value(self):
? ? ? ? return self.__value
?
child = Child(4)
print(child.get_value())
?
Traceback (most recent call last):
? File "/Users/yangjiajia/Desktop/project/python/algebra/test.py", line 24, in <module>
? ? print(child.get_value())
? File "/Users/yangjiajia/Desktop/project/python/algebra/test.py", line 21, in get_value
? ? return self.__value
AttributeError: 'Child' object has no attribute '_Child__value'

為何會這樣?因為python會對類的私有屬性做些轉(zhuǎn)換,以保證private字段的私密性。當(dāng)編譯器看到Child.get_value方法要訪問私有屬性時,他會先把__value變換為_Child_value然后再進行訪問,但實際上該私有屬性是_Parent__value。字類無法訪問父類的私有屬性,只是因為訪問的名稱不同。

查詢該對象的屬性字典便知

class Parent:
? ? def __init__(self, value):
? ? ? ? self.__value = value?
?
class Child(Parent):
? ? def name(self):
? ? ? ? names = 'yang'
?
? ? def get_value(self):
? ? ? ? return self.__value
?
child = Child(4)
print(child.__dict__)
?
{'_Parent__value': 4}

python開發(fā)的原則還是要少用私有屬性,如果需要保證屬性不重復(fù),可以在其前面加上單個下劃線。

class Parent:
? ? def __init__(self, value):
? ? ? ? self._value = value?
?
class Child(Parent):
? ? def get_value(self):
? ? ? ? return self._value
?
child = Child(4)
assert child._value == 4

python私有屬性的定義

在Java中用private對變量或者方法進行限定,則方法僅在整個類內(nèi)部可見,外部不可見、不可訪問。

在python中也有私有屬性定義,使用函數(shù)名前綴的兩個下劃線進行定義。

例如 __parameter

接下來看上一個Dog的例子

class Dog(object):
? ? __slots__ = ('__name', 'kind', 'level')
? ? def __init__(self,name,kind,level):#構(gòu)造函數(shù),定義屬性和初始方法
? ? ? ? self.__name=name
? ? ? ? self.kind=kind
? ? ? ? self.level=level#賦值
? ? ? ? print(f"This is a {self.kind} dog called {self.__name} with level {self.level}")
?
? ? def run(self):#定義類中的方法
? ? ? ? print(f"{self.__name} is now running!")
?
? ? def roll_over(self):
? ? ? ? print(f"{self.__name} is now rolling over!")
?
? ? def change_level(self):
? ? ? ? self.level+=1#修改類中屬性的值
? ? ? ? print(f"The level of {self.__name} is now {self.level}")

在另一個文件里面進行調(diào)用

from Zoo.Dog import Dog#導(dǎo)包
?
dog=Dog("Halo","Husty",3)#實例化
?
dog.run()
dog.roll_over()
dog.change_level()#調(diào)用方法

發(fā)現(xiàn)當(dāng)我們輸入以下內(nèi)容時,會報錯,非法訪問。

print(dog.__name)

在本例中,__name是對name進行私有限定。 

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python命名空間namespace及作用域原理解析

    Python命名空間namespace及作用域原理解析

    這篇文章主要介紹了Python命名空間namespace及作用域原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • 詳解Python如何優(yōu)雅地解析命令行

    詳解Python如何優(yōu)雅地解析命令行

    隨著我們編程經(jīng)驗的增長,對命令行的熟悉程度日漸加深,想來很多人會漸漸地體會到使用命令行帶來的高效率。本文將介紹Python解析命令行的兩種方法,需要的可以參考一下
    2022-06-06
  • Python3 sys.argv[ ]用法詳解

    Python3 sys.argv[ ]用法詳解

    這篇文章主要介紹了Python3 sys.argv[ ]用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • python爬蟲的工作原理

    python爬蟲的工作原理

    本文主要介紹了python爬蟲的工作原理,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • python發(fā)送郵件示例(支持中文郵件標(biāo)題)

    python發(fā)送郵件示例(支持中文郵件標(biāo)題)

    python發(fā)送中文郵件示例,支持中文郵件標(biāo)題和中文郵件內(nèi)容。支持多附件。根據(jù)用戶名推測郵件服務(wù)器提供商
    2014-02-02
  • CentOS 6.5中安裝Python 3.6.2的方法步驟

    CentOS 6.5中安裝Python 3.6.2的方法步驟

    centos 6.5默認(rèn)自帶的python版本為2.6,而下面這篇文章主要給大家介紹了關(guān)于在CentOS 6.5中安裝Python 3.6.2的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • cuda突然不能用了的完美解決方法

    cuda突然不能用了的完美解決方法

    這篇文章主要給大家介紹了關(guān)于cuda突然不能用了的完美解決方法,文中通過圖文介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用cuda具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-06-06
  • 利用python程序生成word和PDF文檔的方法

    利用python程序生成word和PDF文檔的方法

    這篇文章主要給大家介紹了利用python程序生成word和PDF文檔的方法,文中給出了詳細(xì)的介紹和示例代碼,相信對大家具有一定的參考價值,有需要的朋友們下面來一起看看吧。
    2017-02-02
  • python爬蟲beautifulsoup庫使用操作教程全解(python爬蟲基礎(chǔ)入門)

    python爬蟲beautifulsoup庫使用操作教程全解(python爬蟲基礎(chǔ)入門)

    這篇文章主要介紹了python爬蟲beautifulsoup庫使用操作全解(python爬蟲基礎(chǔ)入門),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Python PaddleNLP實現(xiàn)自動生成虎年藏頭詩

    Python PaddleNLP實現(xiàn)自動生成虎年藏頭詩

    這篇文章主要介紹了利用Python PaddleNLP實現(xiàn)自動生成虎年藏頭詩功能,文中的示例代碼講解詳細(xì),感興趣的同學(xué)可以跟隨小編一起試一試
    2022-01-01

最新評論