摘要:面向對象編程的思想在很多語言中都已經很成熟了,在里,也支持這種編程方式面向編程里面的幾個概念類,對象,屬性,方法,下面就用例子看一下如何實現類,對象實例關鍵字括號中的表是類繼承的類,默認都至少要繼承一個叫的類比如要定義一個學生類這里我們僅僅
OOP(面向對象編程)的思想在很多語言中都已經很成熟了, 在Python里, 也支持這種編程方式
面向編程里面的幾個概念: 類, 對象, 屬性, 方法,下面就用例子看一下如何實現
class Classname(object):
關鍵字class, 括號中的object表是Classname類繼承的類, 默認都至少要繼承一個叫object的類
比如要定義一個學生類:
class Student(): pass
這里我們僅僅是定義了一個類, 并未做任何實際的工作
那如何使用一個類呢, 當然要實例化這個類了
s = Sutdent() print s #<__main__.Student object at 0x7fb60ad6c450>
那這個s 其實就是這個類的一個對象(實例),
屬性這個其實就是類中的一些變量, 可以外部賦值, 也可內部定義, 假設我們外部定義某個Student實例的名字
s.name = "Yi_Zhi_Yu" print s.name #Yi_Zhi_Yu
在類內部定義
class Student(): name = "Yi_Zhi_Yu" s = Sutdent() print s.name #Yi_Zhi_Yu方法
類的方法, 表示類的對象可以進行的操作
class Student(): name = "Yi_Zhi_Yu" def set_name(self, name): self.name = name def get_name(self) return self.name #實例化 s = Sutdent() s.set_name("Tony") print s.get_name() #Tony
注意, 類中的每個方法定義的時候都至少要帶一個參數 self, 他代表的是綁定的實例, 即方法中要操作的對象, 這個和PHP很不一樣, 假如不帶這個self 參數
def get_name() return "Tony" print s.get_name() #TypeError: get_name() takes no arguments (1 given)
會報錯, 還說已經傳遞了一個給get_name, 實際上這個1 given 就是對象, get_name中需要有個參數接收, 就是self, 所以實際上這個self也可以用其他名稱代替, 因為他僅僅是個參數名
def get_name(m): return m.name print s.get_name() # Tony
這個self也僅僅是在定義方法時帶, 實際調用的時候要省略, 為什么的原因就是上面說的, 會自動傳遞進去
另外在說一個特殊的方法, 在實例化類的時候, 往往需要在實例的時候就執行某些操作, 在PHP中叫構造函數, 那python中呢: __init__
這里順便把完成的類代碼寫下來
class Student(): name = "" def __init__(self, name): #自然要帶self self.name = name def set_name(self, name): self.name = name def get_name(m): return m.name s = Student("Yi_Zhi_Yu") print s.get_name() #Yi_Zhi_Yu模塊與類
我們寫好了上面的類, 文件名稱叫student.py, 如何被其他模塊引入呢
第一種方式
import student s = student.Student("Yi_Zhi_Yu") print s.get_name() #Yi_Zhi_Yu
另一種方式
from student import Student s = Student("Yi_Zhi_yu") print s.get_name()
其實, 第二種方式是用于引入某個模塊的某些函數或類或變量, 而不是完全引入,比如, 我們在上面的student模塊文件的Student類外層添加一個函數
def f_i_test(): print "Hello World"
當我們需要這個模塊中的這個函數,而不需要Student類的時候, 就可以使用
from student import f_i_test f_i_test() #Hello World
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37576.html
摘要:面向對象編程之旅編程是什么大家好,作為小白,最近學習了很多編程的知識,因為腦容量有限,特此一一按照學習順序記錄下來,如果哪里有錯誤,還請大神盡快指出,以免誤導他人。。。繼承也允許把一個派生類的對象作為一個基類對象對待。 Python面向對象編程之旅 OOP編程是什么 大家好,作為小白,最近學習了很多Python OOP編程的知識,因為腦容量有限,特此一一按照學習順序記錄下來,如果哪里有...
摘要:與的特點比較這兩個目前都是小眾語言做了些時間的研究寫了點東西有了點心得相似點有衛生宏區別與的不衛生宏在類或定義體之外定義函數代碼沒有分成頭與實現體例如的頭與實現的與定義的接口定義與實現定義是分開的而與是不分開的運用函數式編程高階函數目前是新 nim與rust的特點比較 這兩個目前都是小眾語言,做了些時間的研究,寫了點東西有了點心得 相似點: 有衛生宏.區別與C++的(不衛生)宏 在類...
摘要:在對象接口后包裝其實現的細節,從而隔離了代碼的修改對用戶產生的影響。類提供了一個新的本地作用域,最小化了變量名沖突。類其實并沒有結束,不過本講座到此對類暫告一段。 前面對類的有關內容已經描述不少了,其實話題遠遠沒有結束,不過對于初學者,掌握這些已經算是入門,在以后的實踐中,還需要進行體會和感悟。 這幾天和幾個朋友以各種途徑討論過OOP的相關問題,他們是:令狐蟲、Frank、晉劍、小馮...
摘要:它的目標就是在不減慢你編程速度的前提下,幫助你來編寫簡潔而又正確的代碼。對于這種情況,我們就需要有條件來控制某些屬性不能為非法值。所以,一定要在里面某個錯誤。 使用attrs解放雙手 大家好,這一期我想和大家分享一個OOP編程的高效神器:attrs庫 首先我們來介紹下 attrs 這個庫,其官方的介紹如下: attrs 是這樣的一個 Python 工具包,它能將你從繁綜復雜的實現上解脫...
閱讀 3063·2021-11-24 10:34
閱讀 3322·2021-11-22 13:53
閱讀 2630·2021-11-22 12:03
閱讀 3598·2021-09-26 09:47
閱讀 3005·2021-09-23 11:21
閱讀 4772·2021-09-22 15:08
閱讀 3289·2021-07-23 10:59
閱讀 1258·2019-08-29 18:31