1. 程式人生 > >面向對象-封裝

面向對象-封裝

自動 查看 繼承 int 自動變 name http nbsp 訪問

---恢復內容開始---

一:創建類和對象
  class f:
    def bar(self):
      print(‘bar‘)
    def hello(self, name)
      print(‘hello %s‘%name)
  fobj = f()
  fobj.bar() > ‘bar‘
  fobj.hello(‘tom‘) >‘hello tom‘

ps:類中的第一個參數必須是self,類中定義的函數叫方法
二:面向對象三大特性--封裝
#三大特性:封裝、繼承、多態
1.封裝:
  #將內容封裝到某處
  #從某處調用被封裝的內容

例1:將內容封裝到某處

技術分享圖片

解析:self是一個形式參數,當執行 fobj = F(‘tom‘,18)時,self等於fobj

例2:從某處調用封裝的內容
調用封裝的內容時,有兩種情況:
  #通過對象直接調用
  #通過間接self調用

fobj = F(‘tom‘,18)
fobj.name >>> tom 調用fobj對象的name屬性
fobj.age >>> 18  調用fobj對象的age屬性

class F:
  def __init__(self,name,age)
    self.name = name
    self.age = age
  def hello(self):
    print(self.name)
    print(self.age)
fobj = F(‘tom‘,18)
fobj.hello()
>>> tom
>>> 18

設置私有

#類中所有雙下劃線開頭的名稱如__x都會在類定義時,自動變形成:_類名__x的形式
class A:
  __B = 123 # _A__B
  def __init__(self):
    self.__T = 10 # 變成: self._A__T
  def __foo(self):  # 變成: _A__foo,這是一個私有方法
    print(self.__T)
  def test(self):
    self.__foo()  #只有在類內部,才能訪問私有變量和方法,即 調用 _A__foo
a = A()
#a._A__N 可以在外部直接被訪問到的
# self.__T、__foo(self) 這樣的私有變量和方法是直接在外部訪問的,但是可以通過__dict__來查看私有的變量

封裝的意義:
  1.封裝數據:隱藏起來對外提供操作該數據的接口,這樣可以確保操作屬性的安全性
  2.封裝方法:目的是隔離復雜度,將復雜的實現過程進行隱藏,對外提供接口。ATM機就是一個很好的例子
  


例子如下:
1.打印汽車有4個輪子
2.打印汽車是紅色的
3.打印汽車牌子是奔馳

1.打印汽車有8個輪子
2.打印汽車是白色的
3.打印汽車牌子是寶馬
#函數式編程:
def carr(num):
  print(‘汽車有%s個輪子‘%num)
def color(col):
  print(‘汽車是%s色‘ %col)
def brand(bran):
  print(‘汽車牌子是%‘%bran)
調用:
carr(4)
color(‘紅色‘)
brand(‘奔馳‘)

carr(8)
color(‘白色‘)
brand(‘寶馬‘)

#面向對象編程
class F:
  def __init__(self, carr, color, bran):
    self.carr = carr
    self.color = color
    self.bran = bran
  def carr(self):
    print(‘汽車有%s個輪子‘%self.carr)
  def color(col):1
    print(‘汽車是%s色‘ %self.color)
  def brand(bran):
    print(‘汽車牌子是%‘%self.bran)
fobj1 = F(4,‘紅色‘,‘奔馳‘)
fobj1.carr()
fobj1.color()
fobj1.brand()

fobj2 = F(8,‘白色‘,‘寶馬‘)
fobj1.carr()
fobj1.color()
fobj1.brand()

---恢復內容結束---

面向對象-封裝