python之封裝(面向對象三大特性之一)

__x = 1   #  _A__x

什麼是封裝

變量名稱前加上__    就是隱藏變量。

隱藏類型的原理是 在定義的時候把隱藏名稱變名  __AttrName  -------->  _classname__AttrName

 

class Foo:
    def __func(self):
        print('from foo')


class Bar(Foo):
    def __func(self):
        print("from Bat")

b = Bar()
b._Bar__func()


...
特點:
    1、外部無法直接obj.__AttrName
    2、在類內部__AttrName是可以直接調用的
    3、子類無法覆蓋父類__AttrName 的屬性(名字都不一樣啦,加了類名)
...

這種隱藏只是變性操作,把所有下劃線變成別的名稱。在類定義階段就實現。 

例子一:

class A:
    def foo(self):
        print('A.foo')

    def bar(self):
        print('A.bar')
        self.foo()

class B(A):
    def foo(self):
        print("B.foo")

b =B()
b.bar()

   

        b沒有bar(),查到class A執行,但是調用foo的時候其實是調用的class B的函數。爲了在bar()絕對使用class A的foo函數,       因 此要用到封裝。

    封裝的意義

1.封裝數據屬性:明確區分內外,控制外部對隱藏屬性的操作

   在外部無法直接接觸到隱藏的屬性,可以在class內部寫一個接口提供窗口。但是這樣就規定了__name的格式。

class People:
    def __init__(self,name,age):
        self.__name = name
        self.__age = age

    def tell_info(self):
        print('Name:<%s> Age:<%s>'%(self.__name,self.__age))

p = People('egon',18)
p.tell_info()

 相同的道理,可以在class內部寫一個接口修改隱藏屬性的數據。並且可以對輸入的數據進行驗證功能。

def set_info(self,name,age):
     if not isinstance(name,str):
        return
     self.__name = name
     self.__age = age

2.封裝方法目的:隔離複雜度

 將複雜的方法封裝在內部。

3.擴展性高

    使用者無需改變自己的使用方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章