python的單下劃線和雙下劃線

2022-07-27 03:03:09 字數 3065 閱讀 4410

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)

print

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