python 直接訪問類的私有屬性或方法
# 環境:py 3.6.2 #
1 - 訪問類的私有屬性或者方法.
首先我們定義一個包含私有屬性的類
class Private():
def __init__(self):
self.__private = 521
例項化並嘗試訪問__private私有屬性,
private_out = Private()
private_out.__private
結果如下,
Traceback (most recent call last): File "<pyshell#140>", line 1, in <module> private_out.__private AttributeError: module 'private' has no attribute '__private'
2 - 名字重寫
無法訪問私有屬性的原因是:python對私有屬性的名字進行了修改(重寫) , 這樣做的好處是:防止子類修改基類的屬性或者方法. 現在,我們遍歷dir( private )檢視private的內建方法和屬性:
for i in dir(private_out):
print(i)
顯示結果如下:
#結果如下: _Private__private __class__ __delattr__ __dict__ __dir__ __doc__ __eq__ __format__ __ge__ __getattribute__ __gt__ __hash__ __init__ __init_subclass__ __le__ __lt__ __module__ __ne__ __new__ __reduce__ __reduce_ex__ __repr__ __setattr__ __sizeof__ __str__ __subclasshook__ __weakref__
可以看到,python內部將私有__private修改成了' _Private_private ' (_類名__屬性名) ,這就是我們無法直接訪問私有屬性或者方法的原因,那既然我們知道了這個原因,根據修改名便可以訪問它了:
#結果如下:
private_out._Private__private
>>>521
3 -忠告
知道該原理便可,請不要嘗試去直接訪問它 , 既然人家這麼設定肯定有它這麼設定的理由,切不可' 魯莽從事啊 '. 當然,你可以間接訪問類中的私有方法或者屬性,例如,
這樣就可以正常訪問類的私有方法或者屬性了.class Private(): def __init__(self): self.__private = 521 def getPrivatevalue(self): return self.__private
總結:python入門簡單,精學不易,希望這篇文章對你有所幫助.
相關推薦
php中類外部訪問類私有屬性的方法
我們都知道,類的私有屬性在類外部是不可訪問的,包括子類中也是不可訪問的。比如如下程式碼: <?php class Example1{ private $_prop = 'test'; } $r = function(Example1 $e){
python 直接訪問類的私有屬性或方法
# 內容:直接訪問類的私有屬性或者方法 # # 環境:py 3.6.2 # 1 - 訪問類的私有屬性或者方法. 首先我們定義一個包含私有屬性的類 class Private(): def __i
Python中直接訪問類的私有屬性或私有方法
首先我們定義一個包含私有屬性的類 class Foo(object): def init(self): self.__private = 521 例項化並嘗試訪問__private私有屬性, private_out = Foo() private_out.__p
Python的實例定屬性和方法或類綁定方法
Python一、給實例對象綁定屬性和方法:1、給實例綁定屬性:先定義一個Student類 #!/usr/bin/python class Student(object): pass 然後綁定屬性: s = Student() s.name = ‘AAA‘ # 動態給實例綁定一個屬性 print(
Unity 3D:訪問另一個C#類中的屬性或方法
在開發Unity 3D 遊戲的過程中,經常遇到在某個C#類中訪問另一個C#類中的方法或屬性;比如:在Eenmy.cs中訪問PlayAttack.cs指令碼中的TakeDamage(int damage
python類私有屬性及訪問控制
不同於c++,java這些編譯型語言Pyt,hon根本沒有訪問控制,只有變數名壓縮…這麼說的要麼是大神,要麼是像我這樣鑽牛角尖的… 首先看一段程式碼,我們想物件的一個屬性只能被這個這個物件(即通過類裡定義的方法來訪問)所訪問時,通常會這麼寫: class P
python中子類不能繼承父類的私有屬性和方法
#在子類中是不能繼承私有屬性和方法的, #但是私有屬性和方法可以在同一個類中被呼叫 class Person(object): def __init__(self,name): self.__name = name self._age = 12
python—類的屬性和方法總結
python一、類的屬性總結(類的屬性定義在方法外,對象的屬性定義在方法內)理解:類的(靜態)屬性:(人類的五官,理解為變量)類的(動態)方法:(人類吃穿住行,理解為一個函數,至少帶一個參數self,指向類本身)對象:類的實例化,之後才能有屬性和方法1)類的屬性,也是公有屬性;類的私有屬性2)對象的公有屬性;
Python中類的屬性、方法及內置方法
包含 obj urn 資源 tin 初始化 方式 Coding 特性 1.類的屬性 成員變量 對象的創建 創建對象的過程稱之為實例化,當一個對象被創建後,包含三個方面的特性對象聚丙屬性和方法, 句柄用於區分不同的對象, 對象的屬性和方法,與類中的成員變量和成員函數對應, o
Python 面向對象 --- 私有屬性和私有方法
處理 %d com 私有 訪問 class 無法 self. inf 01,應用場景及定義方式 應用場景 在實際開發中,對象 的 某些屬性或方法 可能只希望 在對象的內部被使用,而 不希望被外部訪問到 私有屬性 就是 對象 不希望公開的 屬性 私有方法 就是 對象 不希望
php 中的過載技術——解決呼叫物件(或類)的未定義的屬性或方法出錯問題
過載的基本概念: 過載在通常的“面向物件的語言”中的含義:是指在一個類(或物件)中,有多個名字相同但是形參不同的方法的現象; 如:class A{ function f1(){} function f2($p1){} function f3($p1,$p2){} }
python3面向物件(3)私有屬性和方法以及訪問私有屬性和方法的方式
python3中的私有屬性和方法是以__兩個下劃線開頭的: class Woman(object): #定義一個woman類 def __init__(self,name): self.name = name #公有屬性 self
TypeError Error 1009 無法訪問空物件引用的屬性或方法
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Python中面向對向介紹及類的屬性和方法
1.面向物件介紹 類和物件:是面向物件中兩個重要概念 類:是物件對事物的抽象,比如人類\球類 物件:是類的一個例項,比如足球\籃球 例項說明: 球類可以對球的特徵和行為進行抽象,然後可以例項化一個真實的球體出來 為什麼面向物件? 面向物件的主要思想是 封裝
Python中類的屬性及方法的總結及python改寫memocache啟動指令碼舉例
1.類的屬性總結 類屬性,也是公有屬性, 類的私有屬性, 物件的共有屬性, 物件的私有屬性, 內建屬性, 函式的區域性變數, 全域性變數, #/usr/bin/env python # -*- coding:utf-8 -*- class
python中類的屬性、方法、結構以及靜態方法
一、類屬性 在Python中一切皆物件,類也是一個物件--->類物件,在程式執行中,類物件在記憶體中只有一份,通過它可以創建出很多個物件例項,除了封裝例項和屬性的方法外,類物件還可以擁有自己的屬性和方法:類屬性和類方法 通過類名的方式可以直接訪問類的屬性 類屬性其
GObject 子類私有屬性的外部訪問
之前,寫了一篇 GObject 勸學的文章 [1],還有兩篇有關 GObject 子類物件資料封裝的文章 [2, 3]。 雖然,建立一個 GObject 子類物件需要一些輔助函式和巨集的支援,並且它們的內幕也令人費解,但是隻要將足夠的信任交託給 GObject 開發者
全面瞭解python中的類,物件,方法,屬性
python中一切皆為物件,所謂物件:我自己就是一個物件,我玩的電腦就是物件,坐著的椅子就是物件,家裡養的小狗也是一個物件。。。。。。 我們通過描述屬性(特徵)和行為來描述一個物件的。比如家裡的小狗,它的顏色,大小,年齡,體重等是它的屬性或特徵。它會汪汪叫,會搖
python自動化運維學習第十四天--類的屬性和方法總結
類的屬性 類屬性(公有屬性) 類的私有屬性 物件的公有屬性 物件的私有屬性 內建屬性 函式的區域性變數 全域性變數 #!/usr/bin/python # -*- coding:utf-8 -*- class MyClass(object): var1 = '類屬性,類的公有
C++的private的屬性或方法真的不能訪問嗎? no
我們通常說,C++的private屬性或者方法不能被其他的物件訪問,在很多時候的確是這樣,但不是絕對的,只要你想辦法,總有辦法可以訪問的廢話不多說,直接上程式碼了。 1)訪問private的私有成員: #include <iostream> us