python 類中的單下劃線開頭的變數表示:該方法為類的私有方法,原則上外部不能訪問,但是用._xx是可以訪問到的
雙下劃線開頭則是強制外部不能直接訪問的用.__xx是訪問不到的,它內部其實是將變數名重新命名為:_類名__變數名,所以可以通過._類名__變數名訪問
#_*_coding:utf-8_*_
__author__ = '
linhaifeng
'class
people:
__star='
earth111111111111
'__star1='
earth111111111111
'__star2='
earth111111111111
'__star3='
earth111111111111
'def
__init__
(self,id,name,age,salary):
print('
----->
',self.__star
) self.id=id
self.name=name
self.age=age
self.salary=salary
defget_id(self):
print('
我是私有方法啊,我找到的id是[%s]
' %self.id)
#訪問函式
defget_star(self):
print(self.__star
)p1=people('
123123123123
','alex
','18
',100000000)
#print(p1.__star)
print(people.__dict__)#
print(p1.__star)
(p1._people__star)##
p1.get_star()
p1.get_star()
#class foo:
#x=1
#def __init__(self,y):
#self.y=y##
def __getattr__(self, item):
#print('執行__getattr__')##
f1=foo(10)
#print(f1.y)
#print(getattr(f1,'y')) #len(str)--->str.__len__()
#f1.sssssssssssssssssssssssssssssssssssss
#class foo:
#x=1
#def __init__(self,y):
#self.y=y##
def __delattr__(self, item):
#print('刪除操作__delattr__')##
f1=foo(10)
#del f1.y
#del f1.x##
class foo:
#x=1
#def __init__(self,y):
#self.y=y##
def __setattr__(self, key, value):
#print('__setattr__執行')
## self.key=value
#self.__dict__[key]=value
#f1=foo(10)
#print(f1.__dict__)
#f1.z=2
#print(f1.__dict__)
#class foo:
#def __getattr__(self, item):
#print('------------->')##
# print(foo.__dict__)
#print(dir(foo))
#f1=foo()##
print(f1.x) #只有在屬性不存在時,會自動觸發__getattr__##
del f1.x #刪除屬性時會觸發_delattr__##
f1.y=10
#f1.x=3 # 設定屬性的時候會觸發——setattr———
class
foo:
def__init__
(self,name):
self.name=name
def__getattr__
(self, item):
print('
你找的屬性【%s】不存在
' %item)
def__setattr__
(self, k,v):
print('
執行setattr
',k,v)
if type(v) is
str:
print('
開始設定')
#self.k=v #觸發__setattr__
self.__dict__[k]=v.upper()
else
:
print('
必須是字串型別')
def__delattr__
(self, item):
print('
不允許刪除屬性【%s】
' %item)
#print('執行delattr',item)
#del self.item
#self.__dict__.pop(item)
f1=foo('
alex')
#f1.age=18 #觸發__setattr__
#print(f1.__dict__)
#print(f1.name)
#print(f1.age)
#print(f1.gender)
#print(f1.slary)
print(f1.__dict__
)del
f1.name
print(f1.__dict__)
Python單下劃線和雙下劃線
python 用下劃線作為變數字首和字尾指定特殊變數。不能用 from moduleimport 匯入 系統定義名字 類中的私有變數名 核心風格 避免用下劃線作為變數名的開始。因為下劃線對直譯器有特殊的意義,而且是內建識別符號所使用的符號,我們建議程式設計師避免用下 劃線作為變數名的開始。一般來講,...
Python 單下劃線和雙下劃線解析
單下劃線 單下劃線開始的成員變數叫做保護變數,意思是只有類物件和子類物件自己能訪問到這些變數 雙下劃線 開始的是私有成員,意思是只有類物件自己能訪問,連子類物件也不能訪問到這個資料。如下列所示 以單下劃線開頭 foo 的代表不能直接訪問的類屬性,需通過類提供的介面進行訪問,不能用 from impo...
Python中單下劃線和雙下劃線
python中存在一些特殊的方法,有些方法以雙下劃線 開頭和結尾,它們是python的魔法函式,比如 init 和 str 等等。不用要這種方式命名自己的變數或者函式。class a def init self,text self.text text def str self return self...