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