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 中不能直接像這樣調用