導航:首頁 > 編程語言 > python定義私有屬性和共有屬性

python定義私有屬性和共有屬性

發布時間:2022-05-05 03:02:22

A. python 類實例化

1、python的類中,以__(兩個下劃線)開頭但不以__結束的就是私有的變數或者函數,私有函數和變數不能在class外調用到。
class test:
def __init__(self, num):
self.__num = num
privateTest = test(100)
privateTest.__num#會報錯
當然也有辦法調到,只是不建議那樣做。
2、第一個class se()中的 變數s,是一個類變數,是class se的變數,類變數可以被類本身訪問,如se.s,也可以被各個對象訪問,而且由於是存在class里的所以值唯一,有點像C++里的static。
但是如果有某一個對象也創建了一個叫s的變數 覆蓋了類變數,那麼那個self.s就是對象的屬性,而不會調到類變數。
你可以運行試試
# -*- coding: cp936 -*-
class A:
name = []
def __init__(self, name):
self.name.append(name)

def nameMyself(self, name):
self.name = [name]
print 'my name is',self.name, 'and class A1name is :', A.name

def test(self):
print "my name is", self.name
obj = A("num0")
obj1 = A("num1")
print "obj1`name", obj1.name#對象訪問類變數name
print "class A`name", A.name#class自己訪問類變數name
obj1.test()#此時還是訪問的類變數name
obj1.nameMyself('aid')#給自己起個名覆蓋類變數的name
obj1.test()#對於obj1來說只能訪問自己的name了
print "class A`name", A.name#類變數依然存在

B. python 私有屬性與方法

一般來說,想訪問類成員變數,要麼用類訪問,要麼用實例訪問。實例訪問的是實例的副本,類訪問的是類的副本。
class A:
XXX = 0
def yy(self):
pass
A.XXX
或者,
a = A()
a.XXX
如果想從對象訪問類的副本,可以先拿到這個實例的類,再去訪問它的類成本
a.__class__.XXX
但你這個有點不一樣,你這個是類的私有成員變數,外面是無法訪問的(按照設計思路)。
一般穩健的方式是類的內部設置一個get()方法,調用get方法返回。
當然,如果你強行向訪問,可以這樣
a._A__XXX
但這種方法,訪問的仍然是對象自己的副本,不是類的
如果你想強行訪問,又想訪問的是類自己的副本,可以這樣
a.__class__._A__XXX
另外,找個好點的IDE吧,你這變數名字都拼錯了

C. Python如何為類元素(屬性和方法)提供私有性的方式

Python不支持私有成員。所有Python類中的成員都是公共的,可以從類外部調用或存取的。

所謂成員名前加一條或兩條下劃線「_func」或「__member」的方式只是一種約定俗成,提示用戶這個成員函數或變數只用於內部調用,不是設計給用戶使用的。即使如此,用戶只要想調用便可調用,無任何約束。

D. Python類中的私有屬性前使用什麼來標識

Python 中並沒有有效限制訪問任何實例變數或方法的機制。
Python規定了使用單/雙下劃線為變數/方法的名稱前綴,以模擬受保護和專用訪問說明符的行為。
默認情況下,Python類中所有成員都是公共的,可以從類環境之外訪問任何成員。

E. python 類的定義

Python編程中類定義,代碼如下:

class<類名>:
<語句>

定義類的專有方法:

__init__構造函數,在生成對象時調用
__del__析構函數,釋放對象時使用
__repr__列印,轉換
__setitem__按照索引賦值
__getitem__按照索引獲取值
__len__獲得長度
__cmp__比較運算
__call__函數調用
__add__加運算
__sub__減運算
__mul__乘運算
__div__除運算
__mod__求余運算
__pow__稱方

代碼如下:

#類定義
classpeople:
#定義基本屬性
name=''
age=0
#定義私有屬性,私有屬性在類外部無法直接進行訪問
__weight=0
#定義構造方法
def__init__(self,n,a,w):
self.name=n
self.age=a
self.__weight=w
defspeak(self):
print("%sisspeaking:Iam%dyearsold"%(self.name,self.age))

p=people('tom',10,30)
p.speak()

F. python 類繼承 私有方法和私有屬性

這種方式調用是可以的,不能直接調用。

也就是在class B 中不能直接像這樣調用

G. 訪問python私有屬性問題,如下面描述

因為Python支持動態屬性綁定,當你執行a.__name = "lisi"相當於臨時添加了一個__name屬性,你不光可以執行a.__name = "lisi",還可以執行a.gender = '1', a.level = 1等等,這些都是一樣的,只不過恰好,你添加的屬性跟私有屬性重名了。

classA:
def__init__(self):
self.__name='a'
self.age=10

a=A()

try:
print(a.__name)#沒有輸出
print(a._A__name)#輸出a
except:
pass
a.__name='b'
print(a.__name)

print(a.__dir__())
#輸出
a
b
['__gt__','__new__','__weakref__','__init__','__setattr__','__repr__','__class__','__eq__','__dir__','__delattr__','__ge__','__dict__','__str__','__subclasshook__','age','__le__','__getattribute__','__mole__','__rece__','__format__','__ne__','__hash__','__doc__','_A__name','__sizeof__','__lt__','__name','__rece_ex__']


你會發現輸出a的所有屬性的時候,會有兩個__name,_A__name就是你定義的私有屬性,python內部會將它的屬性名給改成這樣,所以你第一次調用的時候會報錯,但是你其實是可以用a._A__name的方式獲得。而另外一個__name則是你動態綁定的屬性

H. python 類中的私有屬性有哪些

類的私有屬性:
__private_attrs:兩個下劃線開頭,聲明該屬性為私有,不能在類地外部被使用或直接訪問。
在類內部的方法中使用時 self.__private_attrs。

類的方法:
在類地內部,使用def關鍵字可以為類定義一個方法,與一般函數定義不同,類方法必須包含參數self,且為第一個參數

類的私有方法 :
__private_method:兩個下劃線開頭,聲明該方法為私有方法,不能在類地外部調用。
在類的內部調用 self.__private_methods

實例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

class JustCounter:
__secretCount = 0 # 私有變數
publicCount = 0 # 公開變數

def count(self):
self.__secretCount += 1
self.publicCount += 1
print self.__secretCount

counter = JustCounter()
counter.count()
counter.count()
print counter.publicCount
print counter.__secretCount # 報錯,實例不能訪問私有變數

Python不允許實例化的類訪問私有數據,但你可以使用 object._className__attrName 訪問屬性,將如下代碼替換以上代碼的最後一行代碼:
…………………….
print counter._JustCounter__secretCount

這樣就可以訪問私有屬性了

I. Python菜鳥求助 類中定義私有屬性有什麼用啊,為啥到處都能訪問,求解釋

例子很清楚,你是通過對象的方法來訪問這個屬性,而不是student1.__name 這種方式。
它的應用也就是,某些屬性需要一定的條件才可以訪問。
比如一個很常見的許可權控制,一個個人信息類,有一個電話號碼屬性,希望實現經理許可權登陸系統,才可以查詢,就可以用私有屬性來做。

閱讀全文

與python定義私有屬性和共有屬性相關的資料

熱點內容
cnc編程前景怎麼樣 瀏覽:319
lniux命令詳解 瀏覽:493
linuxmysql查詢日誌 瀏覽:368
老捷達夥伴壓縮比 瀏覽:93
改後綴加密 瀏覽:432
郵局選址問題演算法 瀏覽:14
河北伺服器內存雲主機 瀏覽:12
在電腦上怎麼找到加密狗圖標 瀏覽:435
電腦的瀏覽器怎麼打開pdf文件怎麼打開 瀏覽:142
pdf卡片庫下載 瀏覽:11
單片機中二進製表示什麼 瀏覽:725
java網路編程推薦 瀏覽:794
施耐德開關編程 瀏覽:66
組織胚胎學pdf 瀏覽:844
linux查看發包 瀏覽:496
加密貨幣交易所暴利時代 瀏覽:824
歌詞滾動效果android 瀏覽:14
程序員一天的六場戰斗 瀏覽:797
自製壓縮泵的做法 瀏覽:622
androidstring變數 瀏覽:247