python中的組合


python中的組合


什么是組合:組合指的是一個對象中,包含另一個對象。


為什么要用組合:減少代碼冗余


如何使用組合:

# 實現組合

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):
       super().__init__(name, age, sex)

# 日期類
class Date:
   def __init__(self, year, month, day):
       self.year = year
       self.month = month
       self.day = day

   def tell_birth(self):
       print(f'''
      年:{self.year}
      月:{self.month}
      日:{self.day}
      ''')


s1 = Teacher('wanglu', 18, 'female')
d1 = Date(1997, 1, 29)
s1.d1 = d1
d1.tell_birth()
print(s1.d1.tell_birth())

總結:

繼承:

繼承是類與類的關系,子類繼承父類的屬性,子類與父類是一種‘從屬’關系

組合:

組合是對象與對象的關系,一個對象擁有另一個對象中的屬性,是一種你有我也有的關系


'''
練習需求:
  選課系統:
      1、有學生,有老師,學生何老師有屬性‘名字,年齡、性別,課程’
      2、有方法,老師與學生可以添加課程,打印學習/教授課程

'''


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 tell_all_course_info(self):
       # 從當前對象中課程列表中取出所有課程對象
       for course_obj in self.course_list:
           course_obj.tell_course_info()


# 學生類
class Student(People):
   def __init__(self, name, age, sex):
       super().__init__(name, age, sex)
       self.course_list = []


# 老師類
class Teacher(People):
   def __init__(self, name, age, sex):
       super().__init__(name, age, sex)
       self.course_list = []

# 定義一個課程類:課程有:課程名稱, 課程價格, 課程周期
class Course:
   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 tell_course_info(self):
       print(f'''
      ====== 課程信息如下 ======
      課程名稱: {self.course_name}
      課程價格: {self.course_price}
      課程周期: {self.course_time}
      ''')


# 創建學生對象
s1 = Student('wanglu', 19, 'female')


# 創建課程對象
c1 = Course('python', 66666, 6)
c2 = Course('go', 7777, 2)

# 當前學生添加了課程對象
# 添加python課程
s1.add_course(c1)
# 添加go語言
s1.add_course(c2)

# 當前學生打印所有課程信息
s1.tell_all_course_info()

訪問限制

什么是訪問限制機制:

凡是在類內定義的屬性或方法,都會被限制,外部不能直接訪問,該屬性原型

ps:看着像將該屬性或方法隱藏起來了

python特有的:

注意:凡是在類內部定義__開頭的屬性或方法,都會變形為,

_類名__屬性/方法。

為什么要有訪問限制:

比如:將一些隱私的數據,隱藏起來,不讓外部輕易獲取。

接口:

可以將一對數據封裝成一個借口,可以讓用戶調用接口,

並且通過相應的邏輯,最后再將數據返回給用戶。

class User:
   # __開頭的屬性
   __name = 'wanglu'
   __age = 19
   __sex = 'male'
   __ID = '2745140829'
   __bal = 131415926
   def __init__(self, name, age, sex):
       self.__name = name
       self.__age = age
       self.__sex = sex
       # 校驗接口,獲取用戶數據
   def parse_user(self, username, password):
       if username == 'wanglu_jam' and password == '123':
           print(f'''
          通過驗證,獲取用戶信息
          用戶名:{self.__name}
          用戶年齡:{self.__age}
          用戶性別:{self.__sex}
          身份ID{self.__ID}
          用戶資產:{self.__bal}
          ''')
       else:
           print('校驗失敗')

   # __開頭的方法
   def __run(self):
       print('wanglu is lovely...')

obj = User('wanglu', 19, 'famale')
obj.parse_user('wanglu_jam', '123')

print(obj._User__name)

 

封裝介紹

'''
奪命三問:
  1.什么是封裝?
      封: 比如將一個袋子,封起來。
      裝: 比如將一堆小貓、小狗和jason裝在袋子里。
      # 對象 ---> 相當於一個袋子
      封裝指的是可以將一堆屬性和方法,封裝到對象中。

      PS: 對象就好比一個 “袋子/容器”,可以存放一對屬性和方法。
      PS: 存不是目的,目的是為了取,可以通過 “對象.” 的方式獲取屬性或方法。

  2.為什么要封裝?
      可以通過 “對象.” 的方式 “存放/獲取” 屬性或方法。
      對象擁有 "." 的機制。
      方便數據的存取。

  3.如何封裝?
      class User:
          x = 10
          def func():
              pass
      obj = User()
      obj.y = 20
      obj ---> x, func, y

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM