python 中的類和對象 2

# 面向對象編程的三個特色: 封裝, 繼承, 多態
# 封裝:函數是封裝代碼的基本單位,類和對象的封裝屬於更高級的封裝方式, \
#       類中常常聲明一些對象屬性,用來保存數據,在類中聲明的函數操做數據,不一樣功能能夠封裝不一樣的函數


# 繼承特色:
  #  1子類繼承父類,擁有父類的全部屬性和函數
  #   2  子類繼承父類,子類能夠擁有獨屬本身的屬性和函數,但父類不能使用
  #   3  子類繼承父類,子類能夠重寫父類函數
  #       3.1 徹底重寫:子類從新聲明一個和父類名字相同的函數,並且該函數執行功能和父類的不相同
  #       3,2 不徹底重寫:子類從新定義一個和父類函數名同樣的函數,在重寫中調用父類函數,先執行父類函數
  #           而後在該函數添加額外功能的代碼

# object 頂級父類,python中全部的類都是直接或者間接繼承自object

class People(object):
    # 初始化函數
    def __init__(self, name, age, weight):
        self.name = name
        self.age = age
        self.weight = weight

    # 對象函數
    def sleep(self):
        print('這是People類中的slepp函數')
    # 根據工做時間,計算體重是否減小的功能函數
    def work_time(self,time):
        # 若是工做時間在8小時到12小時範圍,體重-2斤
        # 若是工做時間超過12小時,體重-5斤
        if 8<time<=12:
            # 體重-2
            self.weight -= 2
        elif time > 12 :
            # 體重-5
            self.weight -= 5


# 聲明Man類,繼承自People類
class Man(People):
    # Man類中的初始化函數
    def __init__(self, name, age, sex, weight, height):
        # 調用父類的初始化,將父類中的屬性進行初始化,而且將self對象做爲參數傳遞到父類的初始化函數中
        super(Man, self).__init__(name, age, weight)
        # 初始化當類擁有的屬性
        self.sex = sex
        self.height = height

    def somking(self):
        print('這是Man中的smoking函數')
    # 1.徹底重寫一個sleep函數
    def sleep(self):
        # 在這個sleep函數中,能夠執行和父類中徹底不一樣的功能
        print('這是Man類中的sleep函數')
    # 2.重寫work_time函數
    def work_time(self,time):
        # 2.1 根據時間計算體重
        # 先去執行父類中work_time()函數,計算體重
        super(Man, self).work_time(time)
        # 2.2 根據體重 判斷身材是否標準
        # 再去添加額外的功能代碼
        # 身高 - 105 = 體重 身材標準
        # 身高 - 105 > 體重 身材偏瘦
        # 身高 - 105 < 體重 身材偏胖
        result = self.height - 105
        if result > self.weight:
            print('身材偏瘦')
        elif result < self.weight:
            print('身材偏胖')
        else:
            print('身材標準')

# 建立People對象p1
p1 = People('張三', 22, 180)
# p1.sleep()
# 執行功能函數
# p1.work_time(13)
# print('p1工做以後的體重:%s'%p1.weight)

# 父類不可使用子類單獨擁有的屬性和函數
# print(p1.sex)
# p1.somking()

# 建立Man類的對象
m = Man('李四', 22, '男', 70, 180)
# m.sleep()
# m在執行work_time函數時,除了要計算體重以外,還要判斷身材是否標準
m.work_time(12)
print('m工做以後的體重:%s'%m.weight)

2 類的私有屬性python

# 私有屬性值是有兩個雙下劃線__表示的
# 私有屬性只能在類模塊中調用,

class People(object):
   def __init__(self,name):
       self.name = name
       self.__age = 31
## 若是想要在類聲明的外部獲取私有屬性的屬性值,專門寫一個函數,在函數中將私有屬性值返回,在類聲明外部就能夠調用這個獲取私有屬性值
   def get_age(self):
     # 返回__age的屬性值
       return self.__age
   def set_age(self, value):
       # 類聲明的範圍內,能夠放私有屬性
       self.__age = value
    

*************
也能夠在外面更改
p1 = People('張三')
print(p1._People__age)
print('******')
p1._People__age = '34'
print(p1._People__age)
***************
相關文章
相關標籤/搜索