'''
1 什麼是封裝
裝就是將數據屬性或者函數屬性存放到一個名稱空間裏
封指的是隱藏,該隱藏是爲了明確地區份內外,即該隱藏是對外不對內(在類外部沒法直接訪問隱藏的屬性,而在類內部是能夠訪問)函數
2 爲什麼要封裝
1. 封數據屬性:???
2. 封函數屬性:???spa
3 如何封裝???
在類內定義的屬性前加__開頭
'''繼承
# class People:
# __country='China' #_People__country='China'
# __n=111 #_People__n=111
#
# def __init__(self,name):
# self.__name=name #self._People__name=name
#
# def run(self):
# print('%s is running' %self.__name) #self._People__name接口
# print(People.__country)input
# obj=People('egon')
# print(obj.__name)
# print(obj.run)
# obj.run()it
# print(People.__dict__)
# print(People._People__country)
# print(obj.__dict__)
# print(obj._People__name)class
# 總結這種隱藏須要注意的問題:
# 1. 這種隱藏只是一種語法上的變形,並無真的限制訪問
# 2. 這種變形只在類定義階段檢測語法時變形一次,類定義階段以後新增的__開頭的屬性不會發生變形
# People.__x=1
# obj.__y=2語法
# print(People.__dict__)
# print(obj.__dict__)方法
# 3. 在繼承中,父類若是不想讓子類覆蓋本身的方法,能夠在該方法前加__開頭
# class Parent1:
# def __func(self): #_Parent1__func
# print('parent1.func')
#
#
# class Sub1(Parent1):
# def __func(self): #_Sub1__func
# print('sub1.func')總結
# class Foo:
# def __f1(self): #_Foo__f1
# print('Foo.f1')
#
# def f2(self):
# print('Foo.f2')
# self.__f1() #self._Foo__f1()
#
# class Bar(Foo):
# def __f1(self): #_Bar__f1
# print('Bar.f1')
#
#
# obj=Bar()
# obj.f2()
# 封裝的真實意圖:把數據屬性或函數屬性裝起來就是爲了之後使用的,封起來即藏起來是爲不讓外部直接使用
# 1.封數據屬性:把數據屬性藏起來,是爲了避免讓外部直接操做隱藏的屬性,而經過類內開闢的接口來間接地操做屬性,
# 咱們能夠在接口之上附加任意的控制邏輯來嚴格控制使用者對屬性的操做
'''
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))
def set_info(self, name, age):
if type(name) is not str:
print('名字必須是str類型')
return
if type(age) is not int:
print('年齡必須是int類型')
return
self.__name = name
self.__age = age
obj = People('egon', 18)
# obj.tell_info()
# obj.set_info('EGON',19)
# obj.set_info(123,19)
obj.set_info('EGOn','19')
obj.tell_info()
'''
#2. 封函數屬性: 隔離複雜度
class ATM:
def __card(self):
print('插卡')
def __auth(self):
print('用戶認證')
def __input(self):
print('輸入取款金額')
def __print_bill(self):
print('打印帳單')
def __take_money(self):
print('取款')
def withdraw(self):
self.__card()
self.__auth()
self.__input()
self.__print_bill()
self.__take_money()
a=ATM()
a.withdraw()