python封装的好处_Python之浅谈多态和封装
組合
什么是組合
對象的某個屬性是另一個類的對象
為什么使用組合
可以減少代碼冗余
class Person:
school = 'oldboy'
class Teacher(Person):
def __init__(self,name,age,level,course):
self.name=name
self.age=age
self.level=level
#course是課程對象,表示老師教授的課程
self.course=course
class Student(Person):
# course=[] #錯誤
def __init__(self,name,age):
self.name=name
self.age=age
# course是課程對象,表示學生選的課程
self.course_list = []
def choose_course(self,course):
# self.course=[] #錯誤
#把課程對象追加到學生選課的列表中
self.course_list.append(course)
def tell_all_course(self):
#循環學生選課列表,每次拿出一個課程對象
for course in self.course_list:
#課程對象.name 取到課程名字
print(course.name)
class Course:
def __init__(self,course_name,course_price,course_period):
self.name=course_name
self.price=course_price
self.period=course_period
course=Course('Python',20199,7)
stu1=Student('nick',19)
stu1.choose_course(course)
stu2=Student('王二丫',19)
stu2.choose_course(course)
stu2.choose_course(Course('linux',19999,5))
組合可以理解成多個人去造一個機器人,有的人造頭、有的人造腳、有的人造手、有的人造軀干,大家都完工后,造軀干的人把頭、腳、手拼接到自己的軀干上,因此一個機器人便造出來了
多態和多態性
多態
什么是多態?
一類事物的多種形態
比如:動物類:豬,狗,人
多態性
? 多態性是指在不考慮實例類型的情況下使用實例
好處
? 1.增加了程序的靈活性
? 2.增加了程序額可擴展性
多態性
什么是多態性
指在不考慮實例類型的情況下使用實例
約束代碼
第一種方式:用abc實現接口統一化,約束代碼(用的比較少)
import abc
#第一在括號中寫metaclass=abc.ABCMeta
class Animal(metaclass=abc.ABCMeta):
#第二在要約束的方法上,寫abc.abstractmethod裝飾器
@abc.abstractmethod
def speak(self):
pass
第二種方式,用異常處理來實現(常用)
class Animal():
def speak(self):
#主動拋出異常
raise Exception('你得給我重寫它啊')
崇尚鴨子類型:只要走路像鴨子(對象中有某個綁定方法),那你就是鴨子
封裝
封裝是什么意思?
? 從封裝本身的意思去理解,封裝就好像是拿來一個麻袋,把小貓,小狗,小王八,一起裝進麻袋,然后把麻袋封上口子
隱藏
把東西包裝進去之后,隱藏起來,外部訪問不到
如何用代碼實現隱藏
隱藏屬性/隱藏方法 隱藏之后,外部訪問不到,只有內部能夠訪問
隱藏屬性:通過 __變量名來隱藏
隱藏方法:通過 __方法名來隱藏
python 實際上是可以訪問隱藏屬性的
class Person:
def __init__(self,name,age):
self.__name=name
self.__age=age
def get_name(self):
# print(self.__name)
return '[----%s-----]'%self.__name
p=Person('nick',89)
print(p._Person__name)
print(p.__dict__)
#通過變形隱藏了屬性
隱藏方法
隔離復雜度
什么時候屬性變形
只要再類內部,以__變量名 命名的變量,都會被隱藏,會發生的變形,在外部放入的 __變量名 屬性是不隱藏的
#計算人的bmi指數
#property裝飾器:把方法包裝成數據屬性
class Person:
def __init__(self,name,height,weight):
self.name=name
self.height=height
self.weight=weight
@property
def bmi(self):
return self.weight/(self.height**2)
#property之setter和deleter:可以將包裝后的數據進行更改
class Person:
def __init__(self,name,height,weight):
self.__name=name
self.__height=height
self.__weight=weight
@property
def name(self):
return '[我的名字是:%s]'%self.__name
#用property裝飾的方法名.setter
@name.setter
def name(self,new_name):
# if not isinstance(new_name,str):
if type(new_name) is not str:
raise Exception('改不了')
if new_name.startswith('sb'):
raise Exception('不能以sb開頭')
self.__name=new_name
# 用property裝飾的方法名.deleter
@name.deleter
def name(self):
# raise Exception('不能刪')
print('刪除成功')
# del self.__name
p=Person('lqz',1.82,70)
print(p.name)
p.name='pppp'
p.name='xxx'
#改不了,直接拋一異常
p.name=999
p.name='sb_nick'
print(p.name)
del p.name
print(p.name)
總結
以上是生活随笔為你收集整理的python封装的好处_Python之浅谈多态和封装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 人气高的项目_给大家推荐:
- 下一篇: scanner怎样回到文件开头_Rada