日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 面向对象编程基础

發布時間:2024/1/23 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 面向对象编程基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??????????????????????????????????????????????????? Python面向對象編程

簡介:面向對象編程——Object?Oriented?Programming,簡稱?OOP,是一種程序設計思想。OOP?把對象作為程序的基本單元,一個對象包含了數據和操作數據的函數(方法)。

簡單例子:

class?Student(object):
????def?__init__(self,?name,?score):
????????self.name?=?name
????????self.score?=?score

????def?print_score(self):
????????print('%s:?%s'?%?(self.name,?self.score))


bart?=?Student('Bart?Simpson',?59)??#?實例化對象
lisa?=?Student('Lisa?Simpson',?87)
bart.print_score()??#?調用對象方法

????面向對象最重要的概念就是類(Class)和實例(Instance),必須牢記類是抽象的模板,比如?Student?類;而實例是根據類創建出來的一個個具體的“對象”,比如bart,?lisa;每個對象都擁有相同的方法,但各自的數據可能不同,?因為python是一門動態語言。和普通的函數相比,在類中定義的函數只有一點不同,就是第一個參數永遠是實例變量?self,并且,調用時,不用傳遞該參數。除此之外,類的方法和普通函數沒有什么區別,所以,你仍然可以用默認參數、可變參數、關鍵字參數和命名關鍵字參數。函數參數請參考這篇文章

????注意到__init__方法的第一個參數永遠是?self,表示創建的實例本身,因此,在__init__方法內部,就可以把各種屬性綁定到?self,因為?self就指向創建的實例本身。?有了__init__方法,在創建實例的時候,就不能傳入空的參數了,必須傳入與__init__方法匹配的參數,但?self?不需要傳,Python?解釋器自己會把實例變量傳進去。

?訪問限制:?

在?Class?內部,可以有屬性和方法,而外部代碼可以通過直接調用實例變量的方法來操作數據,這樣,就隱藏了內部的復雜邏輯。?但是,從前面?Student?類的定義來看,外部代碼還是可以自由地修改一個實例的?namescore?屬性:?

>>>?bart?=?Student('Bart?Simpson',?98)

>>>?bart.score?98

>>>?bart.score?=?59

>>>?bart.score?59?

如果要讓內部屬性不被外部訪問,可以把屬性的名稱前加上兩個下劃線__,在?Python?中,實例的變量名如果以__開頭,就變成了一個私有變量(private),只有內部可以訪問,外部不能訪問,所以,我們把?Student類改一改:?

class?Student(object):?

def?__init__(self,?name,?score):

self.__name?=?name

self.__score?=?score?

def?print_score(self):??

print('%s:?%s'?%?(self.__name,?self.__score))?

改完后,對于外部代碼來說,沒什么變動,但是已經無法從外部訪問實例變量.__name?和實例變量.__score?了:?

>>>?bart?=?Student('Bart?Simpson',?98)?

>>>?bart.__name?Traceback?(most?recent?call?last):???File?"<stdin>",?line?1,?in?<module>?AttributeError:?'Student'?object?has?no?attribute?'__name'?

這樣就確保了外部代碼不能隨意修改對象內部的狀態,這樣通過訪問限制的保護,代碼更加健壯。但是如果外部代碼要獲取?name?和?score?怎么辦?可以給?Student?類增加get_name?和?get_score?這樣的方法:?

class?Student(object):

...

def?get_name(self):

return?self.__name?

? def?get_score(self):

return?self.__score?

如果又要允許外部代碼修改?score?怎么辦?可以再給?Student?類增加set_score?方法:?

class?Student(object):

?...?

def?set_score(self,?score):

self.__score?=?score?

你也許會問,原先那種直接通過?bart.score?=?59?也可以修改啊,為什么要定義一個方法大費周折?因為在方法中,可以對參數做檢查,避免傳入無效的參數:?

需要注意的是,在?Python?中,變量名類似__xxx__的,也就是以雙下劃線開頭,并且以雙下劃線結尾的,是特殊變量,特殊變量是可以直接訪問的,不是?private?變量,所以,不能用__name____score__這樣的變量名。?有些時候,你會看到以一個下劃線開頭的實例變量名,比如_name,這樣的實例變量外部是可以訪問的,但是,按照約定俗成的規定,你看到這樣的變量時,意思就是,“雖然我可以被訪問,但是,請把我視為私有變量,不要隨意訪問”。?雙下劃線開頭的實例變量是不是一定不能從外部訪問呢?其實也不是。不能直接訪問__name?是因為?Python?解釋器對外把__name?變量改成了_Student__name,所以,仍然可以通過_Student__name?來訪問__name?變量:

?

>>>?bart._Student__name?

>>>'Bart?Simpson'?

但是強烈建議你不要這么干,因為不同版本的?Python?解釋器可能會把__name?改成不同的變量名。?

好,講到這里,我們停一下,切切記住:在python中,變量命名規則:

普通變量命名則如?count?,?my_count?

特殊變量命名如?__author__?,?__name__?;

‘私有’變量命名如?_name?,?__name?;



總結

以上是生活随笔為你收集整理的Python 面向对象编程基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。