導航:首頁 > 編程語言 > python中如何把屬性變為私有屬性

python中如何把屬性變為私有屬性

發布時間:2022-08-21 04:45:19

1. 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吧,你這變數名字都拼錯了

2. python 類為什麼不能定義私有屬性和方法

因為b.name[0]
=
'zhang'修改的是類屬性,類屬性是全局的,所有的實例共享,如果想私有化,可以添加
def
__init__(
self
):
self.name
=
list(
self.name
)
就可以了.

3. 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

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

4. Python怎麼修改私有屬性

#看你怎麼理解這個私有的含義:
class Person:
def __init__(self, name, gender):
self.name = name
self.gender = gender

class Student(Person):
def __init__(self, name, gender, age, snum):
super(Student, self).__init__(name, gender)
self.__age = age
self.studentnumber = snum
p = Student('Tom', 'Male', 19, 32)
print(p.gender)
print(p.__dict__)
print(p.__age)
'''
執行之後:
Male
{'name': 'Tom', 'gender': 'Male', '_Student__age': 19, 'studentnumber': 32}
Traceback (most recent call last):
File "D:\Program Files (x86)\Python 3.6.1 (64bit)\Python script practices\new_1.py", line 17, in <mole>
print(p.__age)
AttributeError: 'Student' object has no attribute '__age'
這里即說明__age這個屬性從外部訪問來看,是沒有的,從p這個屬性字典key中__age屬性是以_Student__age的形式體現,可以這么理解為__age是屬於Student類的私有屬性
當然這個所謂的私有屬性,在特殊情況需要修改的時候,也是可以外部訪問修改,改變訪問語句即可,看個人需要吧

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

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

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

6. python 怎麼獲取父類的私有屬性

在Python中就算繼承也不能相互訪問私有變數,或者父類訪問子類的私有屬性也不可以。

7. 訪問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則是你動態綁定的屬性

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

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

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

閱讀全文

與python中如何把屬性變為私有屬性相關的資料

熱點內容
度人經pdf 瀏覽:898
怎麼配置android遠程伺服器地址 瀏覽:956
java程序員看哪些書 瀏覽:939
什麼app可以免費和外國人聊天 瀏覽:793
pdf手寫筆 瀏覽:178
別永遠傷在童年pdf 瀏覽:986
愛上北斗星男友在哪個app上看 瀏覽:418
主力散戶派發源碼 瀏覽:667
linux如何修復伺服器時間 瀏覽:58
榮縣優途網約車app叫什麼 瀏覽:477
百姓網app截圖是什麼意思 瀏覽:225
php如何嵌入html 瀏覽:813
解壓專家怎麼傳輸 瀏覽:745
如何共享伺服器的網路連接 瀏覽:134
程序員簡易表白代碼 瀏覽:168
什麼是無線加密狗 瀏覽:64
國家反詐中心app為什麼會彈出 瀏覽:69
cad壓縮圖列印 瀏覽:104
網頁打開速度與伺服器有什麼關系 瀏覽:865
android開發技術文檔 瀏覽:65