国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python類繼承和多態(tài)原理解析

2020-02-15 21:22:51
字體:
供稿:網(wǎng)友

這篇文章主要介紹了python類繼承和多態(tài)原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

現(xiàn)在屬于是老年人的腦子,東西寫著寫著就忘了,東西記著記著就不知道了。之前學(xué)C++的時候就把類、對象這塊弄得亂七八糟,現(xiàn)在是因為很想玩python,所以就看看python的類和對象。

就像說的,類有三個特征:封裝、繼承、多態(tài)。

1、封裝:類封裝了一些方法,可通過一定的規(guī)則約定方法進行訪問權(quán)限。

C++中的成員變量有public、private、ptotected。

在python中,默認的成員變量都是public的,如果成員變量前面是加兩個下劃線,表示該成員變量是私有的。并且private類不能被繼承類引用,并且不允許直接訪問。

2、繼承:在定義一個類的時候可以從當(dāng)前有的類中進行繼承。

python是允許多繼承的,并且在子類中擁有父類所有的成員變量和方法,為了緩解代碼中的冗余,子類在父類的基礎(chǔ)上增加的成員變量可以如下修改。

class Person(object):  def __init__(self,name,sex):    self.name = name    self.sex = sexclass Child(Person):             # Child 繼承 Person  def __init__(self,name,sex,mother,father):    Person.__init__(self,name,sex)    # 子類對父類的構(gòu)造方法的調(diào)用    self.mother = mother    self.father = fatherMay = Child("May","female","April","June")print(May.name,May.sex,May.mother,May.father)

3、多態(tài):當(dāng)子類繼承父類之后,成員方法既可以重寫也可以不重寫。當(dāng)調(diào)用的時候只要保證新方法編寫正確,不用管原來的代碼。

對擴展開放(Open for extension):允許子類重寫方法函數(shù)
對修改封閉(Closed for modification):不重寫,直接繼承父類方法函數(shù)
python是一種動態(tài)語言,動態(tài)語言是在運行的時候確定數(shù)據(jù)類型的語言。變量在使用前不用聲明,通常變量的類型是被復(fù)制的那個值的類型。

靜態(tài)語言是在編譯的時候變量的數(shù)據(jù)類型即可確定的語言,多數(shù)靜態(tài)類型語言要求在使用變量之前鼻血聲明數(shù)據(jù)類型。

在類中,當(dāng)要對成員變量進行約束的時候可以使用@property,python內(nèi)置的@property裝飾器是負責(zé)把一個方法變成屬性調(diào)用

在實例屬性操作的時候,就知道該屬性很可能不是直接暴露的,而是通過getter和setter方法來實現(xiàn)的。還可以定義只讀屬性,只定義getter方法不定義setter就是一個只讀屬性

請利用@property給一個Screen對象加上width和height屬性,以及一個只讀屬性resolution:

class Screen(object) :  @property  def width(self) :    return self._width  @width.setter  def width(self,valuer) :    if not isinstance(valuer,int):      raise ValueError('score must be an integer')    if valuer < 0 :      raise ValueError('score must over zero')      self._width=valuer  @property  def height(self) :    return self._height  @height.setter  def height(self,number) :    if not isinstance(number,int) :      raise ValueError('score must be an integer')    if number < 0 :      raise ValueError('score must be an zero')    self._height = number  @property  def resolution(self):    return self._width * self._heights=Screen()s.width = 1024s.height = 768print(s.resolution)            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 凉山| 绍兴市| 凤城市| 恭城| 梁河县| 枞阳县| 友谊县| 连云港市| 长汀县| 天柱县| 策勒县| 漾濞| 育儿| 甘孜| 青铜峡市| 万安县| 邓州市| 屯留县| 阳春市| 辽宁省| 常宁市| 塔河县| 虞城县| 金阳县| 思茅市| 双城市| 桑植县| 青神县| 邻水| 光山县| 祥云县| 井研县| 榆中县| 鄂托克旗| 界首市| 修文县| 蒙山县| 六枝特区| 应城市| 卓尼县| 邢台市|