面向對象編程基礎

一、面向對象的支柱

面向對象有三大支柱:封裝、繼承和多態。後面兩個概念在下一個章節中進行詳細的說明,這裏咱們先說一下什麼是封裝。我本身對封裝的理解是「隱藏一切能夠隱藏的實現細節,只向外界暴露(提供)簡單的編程接口」。咱們在類中定義的方法其實就是把數據和對數據的操做封裝起來了,在咱們建立了對象以後,只須要給對象發送一個消息(調用方法)就能夠執行方法中的代碼,也就是說咱們只須要知道方法的名字和傳入的參數(方法的外部視圖),而不須要知道方法內部的實現細節(方法的內部視圖)。html

 

練習1:定義一個類描述數字時鐘


class Clock(object):
   """數字時鐘"""

   def __init__(self, hour=0, minute=0, second=0):
       """初始化方法

      :param hour: 時
      :param minute: 分
      :param second: 秒
      """
       self._hour = hour
       self._minute = minute
       self._second = second

   def run(self):
       """走字"""
       self._second += 1
       if self._second == 60:
           self._second = 0
           self._minute += 1
           if self._minute == 60:
               self._minute = 0
               self._hour += 1
               if self._hour == 24:
                   self._hour = 0

   def __str__(self):
       """顯示時間"""
       return '%02d:%02d:%02d' % \
              (self._hour, self._minute, self._second)


def main():
   clock = Clock(23, 59, 58)
   while True:
       print(clock)
       sleep(1)
       clock.run()


if __name__ == '__main__':
   main()

練習2:定義一個類描述平面上的點並提供移動點和計算到另外一個點距離的方法。


from math import sqrt


class Point(object):

   def __init__(self, x=0, y=0):
       """初始化方法
       
      :param x: 橫座標
      :param y: 縱座標
      """
       self.x = x
       self.y = y

   def move_to(self, x, y):
       """移動到指定位置
       
      :param x: 新的橫座標
      "param y: 新的縱座標
      """
       self.x = x
       self.y = y

   def move_by(self, dx, dy):
       """移動指定的增量
       
      :param dx: 橫座標的增量
      "param dy: 縱座標的增量
      """
       self.x += dx
       self.y += dy

   def distance_to(self, other):
       """計算與另外一個點的距離
       
      :param other: 另外一個點
      """
       dx = self.x - other.x
       dy = self.y - other.y
       return sqrt(dx ** 2 + dy ** 2)

   def __str__(self):
       return '(%s, %s)' % (str(self.x), str(self.y))


def main():
   p1 = Point(3, 5)
   p2 = Point()
   print(p1)
   print(p2)
   p2.move_by(-1, 2)
   print(p2)
   print(p1.distance_to(p2))


if __name__ == '__main__':
   main()

說明:本章中的插圖來自於Grady Booch等著做的《面向對象分析與設計》一書,該書是講解面向對象編程的經典著做,有興趣的讀者能夠購買和閱讀這本書來了解更多的面向對象的相關知識。編程

案例1


# 輸入兩個數字,打印這兩個數的
# 差,和、乘、除、整除、取餘、平方
class YUantingting(object):
   def __init__(self,a,b):
       print(a+b,a-b,a*b)

YUantingting(1,2)

 

案例2


"""
定義3個函數,第一個函數:年齡判斷 <18 ,18<40,40>
        第二個函數:性別判斷: 男,女,未知
        第三個函數:打印 (年輕,中年,老年)和性別
"""
class Name(object):
   def __init__(self,age,gener):
       self.age = age
       self.gener = gener
   def Age(self):
       if self.age <= 18:
           print('年輕')
       elif 18< self.age <= 40:
           print('中年')
       else:
           print('老年')
   def Gener(self):
       if self.gener == '男':
           print('您 ! 是! 男~')
       elif self.gener == "女":
           print('您 ! 是! 女~')
       else:
           print('您好~')


Joker = Name(18,'男')
Joker.Age()
Joker.Gener()

案例3


# 1.判斷一個數字是否是素數.
# 2.數字時鐘..(寫鬧鐘,能夠設定一個時間,打印鬧鐘響了)


"""
for xxx:
  ....
else:
  ....
當for循環可以順利執行完畢,也就是說沒有brek,則走else
不然else不走


for i in range(10):
  print(i)
else:
  print('hahah')
"""


class Name(object):
   """
  判斷一個數字是不是素數
  """
   def __init__(self,num):
       """
      Argus:
      -----
          num: int類型的數字
      """
       self.num = num
   def Check(self):
       """
      檢查self.num是否是素數
      """
       for i in range(2,self.num):
           if self.num % i == 0:
               print('不是素數')
               break
       else:
           print('是素數')
name = Name(11)
name.Check()
相關文章
相關標籤/搜索