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