python中面向?qū)ο蟮淖⒁恻c(diǎn)概述總結(jié)
一、繼承
與java的繼承不同python支持多繼承,如Person類同時繼承Animal類和Species類可以這樣寫:
class Animal(object): def __init__(self): pass class Species: def __init__(self): pass class Person(Animal, Species): country = "CN" def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def printString(self): print("name:" + self.name + "\n" + "age:" + str(self.age) + "\n" + "sex:" + self.sex) person = Person("Jack", 12, "male") print(person.printString())
括號里的即為父類,多類繼承支持優(yōu)先級如下:
二、是否繼承object類的區(qū)別
繼承了object以后類會增加一些屬性,不影響基本使用。
三、封裝
與java不同python沒有private關(guān)鍵字,使用方法是在方法或變量前加“__”
如:
class Person(Animal, Species): __country = "CN" def __init__(self, name, age, sex): self.name = name self.age = age self.__sex = sex def __breath(self): print(self.name+"在呼吸.......") def printString(self): self.__breath() print("name:" + self.name + "\n" + "age:" + str(self.age) + "\n" + "sex:" + self.__sex) person = Person("Jack", 12, "male") print(person.printString()) print(person._Person__sex) print(person._Person__country) person._Person__breath()
設(shè)置了“__”后就表示為私密變量或方法。
但python里卻有破解私密訪問的方法:
即:對象._類名__方法名()或變量名
保密性如下:
__foo__: 定義的是特殊方法,一般是系統(tǒng)定義名字 ,類似 __init__() 之類的。 _foo: 以單下劃線開頭的表示的是 protected 類型的變量,即保護(hù)類型只能允許其本身與子類進(jìn)行訪問,不能用于 from module import * __foo: 雙下劃線的表示的是私有類型(private)的變量, 只能是允許這個類本身進(jìn)行訪問了。 foo:就是public方法
四、類方法、靜態(tài)方法與屬性方法
類方法,不能調(diào)用實(shí)例變量或方法,只能調(diào)用類方法或變量,使用時需要在方法上添加“@classmethod”,如下:
class Person(object): _number = 0 def __init__(self, name, age, sex): self.name = name self.age = age self._number = 2 # 這里操作的是實(shí)例對象的變量 Person._number += 1 # 這里對類的靜態(tài)變量進(jìn)行操作 self.__sex = sex def __breath(self): print(self.name + "在呼吸.......") @classmethod def lucky(cls): # cls代表class類本身與self或this不同,self和this代表實(shí)例對象 person2 = Person("Alex", 13, 'male') person2.printString() print(cls._number) # 輸出類變量 def printString(self): self.__breath() print("name:" + self.name + "\n" + "age:" + str(self.age) + "\n" + "sex:" + self.__sex) person = Person("Jack", 12, "male") person.printString() # 調(diào)用時用實(shí)例對象 Person.lucky() # 調(diào)用時用類
也可以使用靜態(tài)方法的注解“@staticmethod”類
靜態(tài)方法,不能調(diào)用類或?qū)嵗娜魏巫兞?/strong>
屬性方法使用注解“@property”,特點(diǎn)是調(diào)用時和調(diào)用屬性變量類似。
class Person(object): def __init__(self, name, age, sex): self.name = name self.age = age self.__sex = sex @property def lucky(self): # cls代表class類本身與self或this不同,self和this代表實(shí)例對象 print("233") @lucky.setter def lucky(self, num): # cls代表class類本身與self或this不同,self和this代表實(shí)例對象 print("233") self.num = num person = Person("Jack", 12, "male") person.lucky # 調(diào)用時像調(diào)用屬性變量一樣調(diào)用 person.lucky = 1 # 傳參和變量傳參類似 print(person.num)
屬性方法可以調(diào)用類和屬性變量,傳參和變量傳參類似。
五、多態(tài)
class Animal(object): #相對于抽象類 def show(self): print("abstract class must be rewrite!") raise Exception class Person(Animal): def __init__(self, name, age, sex): self.name = name self.age = age self.__sex = sex def show(self): print("hello") person = Person("Jack", 12, "male") print(person.show())
六、python是否存在實(shí)質(zhì)意義上的私有變量?
回答:
不存在的
Python中沒有禁止訪問類中某一成員的保護(hù)機(jī)制。Java是一門非常工程化的語言,其哲學(xué)就是為工程服務(wù),通過各種限制,盡可能減少程序員編寫錯誤代碼的機(jī)會。而Python則相反,其哲學(xué)為信任編碼者,給程序員最少的限制,但程序員必須為自己編寫的代碼負(fù)責(zé)。
那是否意味著Python認(rèn)為面向?qū)ο缶幊滩恍枰庋b呢?答案也是否定的。Python通過編碼規(guī)范而不是語言機(jī)制來完成封裝,具體而言,Python規(guī)定了對變量命名的公約,約定什么樣的變量名表示變量是私有的,不應(yīng)該被訪問(而不是不能被訪問)。
總結(jié)
到此這篇關(guān)于python中面向?qū)ο蟮淖⒁恻c(diǎn)概述總結(jié)的文章就介紹到這了,更多相關(guān)python面向?qū)ο髢?nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
django mysql數(shù)據(jù)庫及圖片上傳接口詳解
這篇文章主要介紹了django mysql數(shù)據(jù)庫及圖片上傳接口詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07Python實(shí)現(xiàn)使用卷積提取圖片輪廓功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)使用卷積提取圖片輪廓功能,涉及Python數(shù)值運(yùn)算與圖像處理相關(guān)操作技巧,需要的朋友可以參考下2018-05-05使用python實(shí)現(xiàn)拉鉤網(wǎng)上的FizzBuzzWhizz問題示例
這篇文章主要介紹了使用python實(shí)現(xiàn)拉鉤網(wǎng)上的FizzBuzzWhizz問題示例,需要的朋友可以參考下2014-05-05Python使用numpy模塊實(shí)現(xiàn)矩陣和列表的連接操作方法
今天小編就為大家分享一篇Python使用numpy模塊實(shí)現(xiàn)矩陣和列表的連接操作方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06Tensorflow Summary用法學(xué)習(xí)筆記
這篇文章主要介紹了Tensorflow Summary用法學(xué)習(xí)筆記,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01python實(shí)現(xiàn)半自動化發(fā)送微信信息
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)半自動化發(fā)送微信信息,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08