1. 程式人生 > >python 直接訪問類的私有屬性或方法

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