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

Python中直接訪問類的私有屬性或私有方法

首先我們定義一個包含私有屬性的類

class Foo(object):
def init(self):
self.__private = 521

例項化並嘗試訪問__private私有屬性,

private_out = Foo()
private_out.__private

結果如下,

Traceback (most recent call last):
File “<pyshell#140>”, line 1, in
private_out.__private
AttributeError: module ‘private’ has no attribute '__private

無法訪問私有屬性的原因是: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

但是我們知道該原理便可,請不要嘗試去直接訪問它 , 既然人家這麼設定肯定有它這麼設定的理由,切不可’ 魯莽從事啊 '. 當然,你可以間接訪問類中的私有方法或者屬性,例如,

class Private():
def init

(self):
self.__private = 521
def getPrivatevalue(self):
return self.__private

這樣就可以正常訪問類的私有方法或者屬性了.

總結:python入門簡單,精學不易,希望這篇文章對你有所幫助.

相關推薦

Python直接訪問私有屬性私有方法

首先我們定義一個包含私有屬性的類 class Foo(object): def init(self): self.__private = 521 例項化並嘗試訪問__private私有屬性, private_out = Foo() private_out.__p

struts2直接訪問jsp頁面報錯解決方法

問題描述: The Struts dispatcher cannot be found.  This is usually caused by using Struts tags without the associated filter. Strut s tags

python 直接訪問私有屬性方法

# 內容:直接訪問類的私有屬性或者方法 # # 環境:py 3.6.2 # 1 - 訪問類的私有屬性或者方法. 首先我們定義一個包含私有屬性的類 class Private(): def __i

python的面向物件(簡單的建立以及內建方法私有屬性私有方法的使用)

一、什麼面向物件和麵向過程? 面向物件:--誰來做? 相比較函式,面向物件是更大的封裝,根據職責在一個物件中封裝多個方法 1.在完成某一個需求前,首先確定職責--要做的事(方法) 2.根據職責確定不同的物件,在物件內部封裝不同的方法(多個) 3.最後完成程式碼

Python屬性,實例屬性私有屬性與靜態方法方法,實例方法

所有 參數 方法 rate self 類屬性 不能 anaconda 賦值 類屬性可以直接在方法中賦值,但 一、調用該屬性時,必須先調用該方法; 二、與 init 方法區別是,init方法只初始化一次,初始化完成後作為全局變量。在方法中賦值屬性,每次調用該方法,該屬性初始化

Python如何獲取屬性的列表

前言 最近工作中遇到個需求是要得到一個類的靜態屬性,也就是說有個類 Type ,我要動態獲取 Type.FTE 這個屬性的值。 最簡單的方案有兩個: ? 1 2 getattr(Type, 'FTE') Type.__dic

Python屬性,例項屬性私有屬性與靜態方法方法,例項方法

1、定義一個類:1.1、類物件支援兩種操作:引用和例項化1.2、Python中屬性、方法和函式的區別:1.2.1、私有屬性:1.3、類屬性、例項屬性、類方法和例項方法:1.3.1、類方法1.3.2、例項方法1.3.3、靜態方法2、繼承1、定義一個類: class className: block bl

在Java怎麼訪問中用Private修飾的私有變數?

package com.saiermeng; //這個程式中最主要的目的就是訪問私有的年齡值 /*之所以對外提供訪問方式,就因為可以在訪問方式中加入邏輯判斷等語句。 對訪問的資料進行操作。提高程式碼健壯性。 */ //年齡定義是私有的,我們現在想要去訪問,首先用邏輯判斷語句

Python類屬性,例項屬性私有屬性與靜態方法類方法,例項方法 屬性分為例項屬性類屬性 方法分為普通方法類方法,靜態方法 一:屬性:   儘量把需要使用者傳入的屬性作為例項屬性,而

屬性分為例項屬性與類屬性 方法分為普通方法,類方法,靜態方法 一:屬性:   儘量把需要使用者傳入的屬性作為例項屬性,而把同類都一樣的屬性作為類屬性。例項屬性在每創造一個例項時都會初始化一遍,不同的例項的例項屬性可能不同,不同例項的類屬性都相同。從而減少記憶體。   1:例項屬性:     最

python7種實現單例模式的方法:staticmethod、classmethod、屬性方法、__new__、裝飾器、元、名字覆蓋

本文的以下實現方法為了簡單起見不考慮執行緒安全。 一:staticmethod 程式碼如下: class Singleton(object): instance = None def __init__(self): raise Syntax

Python學習筆記--私有屬性私有方法

1--定義方式。--在定義屬性或方法時,在屬性名或者方法明前增加兩個下滑線,定義的就是私有屬性或方法class Women:name__agedef __secret(self):print("年齡是:%d" %self.age)2--偽私有屬性和私有方法。--在Python

python的元(metaclass)

優先 裝飾器 target {} pass get tac 搜索 items 認識python中元類的準備工作。 1,首先需要明白一個概念就是python中一切皆為對象。 input: class Trick(object): pass print type(‘1234

Python的基本型簡介

rip 作用 集合 成了 叠代 如果 增加 下劃線 等號 1、變量 變量不僅可以是數字,還可以是任意數據類型 命名規範:變量是用一個變量名表示,變量名必須是大小寫英文、數字和下劃線_的組合,且不能用數字開頭 python中等號“=”是賦值語句,可以把任意數據類型賦值給變量

pythonstring模塊各屬性以及函數的用法

pin position cati a-z 生成 制表符 ror within multipl 原文鏈接:http://blog.chinaunix.net/uid-25992400-id-3283846.html 任何語言都離不開字符,那就會涉及對字符的操作,尤其是腳本語

私有屬性 | 偽私有方法 | Python

創建 span pre pri nac 獲取 對象 屬性 acc 1.私有屬性 # 在屬性前加上雙下劃線 # 為了保護屬性安全 # 私有屬性無法直接通過對象調用,需要添加一個調用方法來

php調用屬性和函數的方法->_=>_::_$this->區別

php調用類的屬性和方法-this-在php中有同學經常搞不明白->,=>,::,$this->的作用,下面通過例子講解下。 一、->用來引用一個類的屬性(變量)、方法(函數) 可以把->理解成調用的意思如:<?phpClass a{Var $id;Function add

變量與實例變量、析構函數、私有屬性私有方法

ini 實例變量 靜態 light ret int print 更改 odi #coding=utf-8 """ 實例的變量又叫類的靜態屬性 類的方法又叫類的動態屬性 類變量與實例變量的區別 x不用實例化就可以調用 所有實例都可以調用x """ class role()

在子重用父屬性

size 繼承 rom elf attack 綁定 不用 pri lap 在子類中派生出新的方法重用父類的方法,有兩種實現方式 方式一:指名道姓(不依賴繼承) class Hero: def __init__(self,name,damage,zing):

python創建實例屬性

生日 list 如何 tle nbsp col tips lambda name 雖然可以通過Person類創建出xiaoming、xiaohong等實例,但是這些實例看上除了地址不同外,沒有什麽其他不同。在現實世界中,區分xiaoming、xiaohong要依靠他們各自

python數據型轉換

lac 特殊字符 集合運算 子類 倒數 IE 發生 開始 ron 1、list轉str 假設有一個名為test_list的list,轉換後的str名為test_str 則轉換方法: test_str = "".join(test_list) 例子: 需要註意的是該