1. 程式人生 > >python私有方法和私有屬性

python私有方法和私有屬性

Python預設的成員函式和成員變數都是公開的,Python 私有屬性和方法沒有類似別的語言的public,private等關鍵詞來修飾。 在python中定義私有變數只需要在變數名或函式名前加上 "__"兩個下劃線,那麼這個函式或變數就會為私有的了

宣告該方法為私有方法,不能在類的外部呼叫

程式碼

class Test(object):
    #普通方法
    def test(self):
        print("普通方法test")
    
#普通方法     def _test1(self):         print("普通方法_test1方法")     #私有方法     def __test2(self):         print("私有方法__test2方法") t = Test() t.test() t._test1() #t.__test2()#呼叫的時候會報錯

執行效果

外界無法訪問私有方法,但可以在類內部方法私有方法。

class Test(object):
    #私有方法
    def __test2(self):
        print("私有方法__test2方法")
    #普通方法
    def test(self):
        print("普通方法test")
    #普通方法
    
def _test1(self):         print("普通方法_test1方法")         #可以在類內部呼叫私有方法         t.__test2()#         self.__test2() t = Test() t.test() t._test1() #t.__test2()t.test2()#呼叫的時候會報錯

  私有方法應用場景

 

執行效果

私有屬性

如果有一個物件,當需要對其進行修改屬性時,有2種方法

物件名.屬性名 = 資料 ---->直接修改

物件名.方法名() ---->間接修改

為了更好的儲存屬性安全,即不能隨意修改,一般的處理方式為

將屬性定義為私有屬性

新增一個可以呼叫的方法,供呼叫

案例

class Person(object):
    def __init__(self, name):
        self.__name = name
    def get_name(self):
        return self.__name
    def set_name(self, new_name):
        if len(new_name) >= 5:
            self.__name = new_name
        else:
            print("error:名字長度需要大於或者等於5")

xiaoming = Person("atguigu")
print(xiaoming.get_name())
#print(xiaoming.__name)#會報錯

class Person(object):
    def __init__(self, name):
        self.__name = name

    def get_name(self):
        return self.__name

    def set_name(self, new_name):
        if len(new_name) >= 5:
            self.__name = new_name
        else:
            print("error:名字長度需要大於或者等於5")


p = Person("afu")

p.set_name("wanger")
print(p.get_name())

p.set_name("lisi")
print(p.get_name())

執行如圖:

 總結

Python中沒有像C++中public和private這些關鍵字來區別公有屬性和私有屬性

它是以屬性命名方式來區分,如果在屬性名前面加了2個下劃線'__',則表明該屬性是私有屬性,否則為公有屬性(方法也是一樣,方法名前面加了2個下劃線的話表示該方法是私有的,否則為公有的)。