一、組合
1、什么是組合
組合指的是一個物件中,包含另一個或者多個物件,
2、為什么要使用組合
為了減少代碼冗余
3、怎么使用組合
使用例子來詳細說明
需求一:列印出老師的姓名、年齡、性別、工資,出生年、月、日;
列印出學生的姓名、年齡、性別、年級,出生年、月、日
# 使用繼承
# 使用繼承 # 父類:人類 class People: def __init__(self, name, age, sex, year, month, day): self.name = name self.age = age self.sex = sex self.year = year self.month = month self.day = day # 子類:老師類 class Teacher(People): def __init__(self, name, age, sex, sal, year, month, day): # People.__init__(self, name, age, sex) super().__init__(name, age, sex, year, month, day) # 派生 self.sal = sal # 子類:學生類 class Student(People): def __init__(self, name, age, sex, grade, year, month, day): super().__init__(name, age, sex, year, month, day) # 派生 self.grade = grade # 列印老師資訊 teacher_obj = Teacher("apple", 17, "female", 99999, 2003, 9, 9) print(teacher_obj.name, teacher_obj.age, teacher_obj.sex, teacher_obj.sal, teacher_obj.year, teacher_obj.month, teacher_obj.day) # 列印學生資訊 student_obj = Student("小明", 84, "female", "大五", 1936, 8, 8) print(student_obj.name, student_obj.age, student_obj.sex, student_obj.grade, student_obj.year, student_obj.month, student_obj.day)
執行結果:
apple 17 female 99999 2003 9 9
小明 84 female 大五 1936 8 8
需求二:列印出老師的姓名、年齡、性別、工資;
列印出學生的姓名、年齡、性別、年級,出生年、月、日
# 使用組合
# 使用組合 # 父類:人類 class People: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex # 子類:老師類 class Teacher(People): def __init__(self, name, age, sex, sal): super().__init__(name, age, sex) # 派生 self.sal = sal # 子類:學生類 class Student(People): def __init__(self, name, age, sex, grade): super().__init__(name, age, sex) # 派生 self.grade = grade # 生日類 class Date: def __init__(self, year, month, day): self.year = year self.month = month self.day = day def Birthday(self): # 列印出生年、月、日 print(f""" ---出生年月日--- 年:{self.year} 月:{self.month} 日:{self.day} """) # 列印老師資訊 teacher_obj = Teacher("apple", 17, "female", 99999) print(teacher_obj.name, teacher_obj.age, teacher_obj.sex, teacher_obj.sal) # 列印學生資訊 student_obj = Student("小明", 84, "female", "大五") # 列印學生姓名、年齡、性別、年級 print(student_obj.name, student_obj.age, student_obj.sex, student_obj.grade) obj = Date(1936, 8, 8) # 學生物件中包含一個自定義日期物件 student_date_obj = obj # print(student_date_obj.year, student_date_obj.month, student_date_obj.day) student_date_obj.Birthday()
執行結果:
apple 17 female 99999 小明 84 female 大五 ---出生年月日--- 年:1936 月:8 日:8
4、繼承和組合的區別
繼承:
繼承是類與類的關系,子類繼承父類的屬性或方法,子類與父類是一種“從屬”關系
組合:
組合是物件與物件的關系,一個物件擁有另一個物件中的屬性或方法,是一種有什么有什么的關系
5、例:組合例題
需求:
1.有老師和學生類,學生與老師有屬性:名字、年齡、性別、課程
2.添加新方法:老師與學生可以添加課程, 列印學習/教授課程,
3.課程類,課程屬性:名稱、價格、周期
4.使用組合實作
# 人類:父類 class People: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex # 添加課程 def add_course(self, course_obj): self.course_list.append(course_obj) # 列印當前物件中課程串列的所有課程資訊 def print_all_course_info(self): for course_obj in student_object.course_list: # student_object.course_list --> [python_obj, go_obj] course_obj.print_course_info() # python_obj.print_course_info(), go_obj.print_course_info() # 老師類:子類 class Teacher(People): def __init__(self, name, age, sex): super().__init__(name, age, sex) # 為老師類添加一個課程串列 --> [] self.course_list = [] # 學生類:子類 class Student(People): def __init__(self, name, age, sex): super().__init__(name, age, sex) # 為學生類添加一個課程串列 --> [] self.course_list = [] # 課程類:課程名稱、價格、周期 class Cource: def __init__(self, course_name, course_price, course_time): self.course_name = course_name self.course_price = course_price self.course_time = course_time # 定義列印課程方法 def print_course_info(self): print(f""" ---課程資訊--- 課程名稱:{self.course_name} 課程價格:{self.course_price} 課程周期:{self.course_time} """) # 創建學生物件 student_object = Student("小明", 84, "female") # 創建課程物件 python_obj = Cource("python", 99999, "6個月") go_obj = Cource("go", 88888, "6個月") # 為學生添加課程物件 student_object.add_course(python_obj) student_object.add_course(go_obj) # 列印學生資訊 print(student_object.name, student_object.age, student_object.sex) # 為學生列印所有課程資訊2 student_object.print_all_course_info()
執行結果:
小明 84 female ---課程資訊--- 課程名稱:python 課程價格:99999 課程周期:6個月 ---課程資訊--- 課程名稱:go 課程價格:88888 課程周期:6個月
二、封裝(理論)
1、什么是封裝
封:比如將一個袋子封起來
裝:比如將一堆零食裝在袋子里
封裝指的是可以將一堆屬性和方法,封裝到物件中( 物件 --> 相當于一個袋子)
PS:物件就好比一個袋子或者容器,可以存放屬性和方法
存不是目的,目的是取,可以通過 "物件.屬性/方法" 的方式獲取屬性或方法
2、為什么要使用封裝
方便資料的存取
(可以通過 "物件.屬性/方法" 的方式 "存放/獲取" 屬性或方法,物件擁有 "." 的機制)
3、如何封裝
class User: x = 10 def func(self): pass obj = User() # 取 print(obj.x) # 存,存的程序也可以叫做封裝 obj.y = 20
# 取 print(obj.y)
執行結果:
10 20
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/192844.html
標籤:其他
上一篇:淺析Java Web框架技術
下一篇:類中屬性和方法的訪問限制機制
