帶你走進(jìn) @ 機器人時代
Discover 點擊上面藍(lán)色文字,關(guān)注我們
Python 類編程中,我們經(jīng)常會碰到需要調(diào)用類的實例,一般來說有兩種方法,一種是通過類對象調(diào)用,另一種是通過類名調(diào)用。
通常情況下,我們希望用類對象來調(diào)用實例方法,但是要注意的是,通過類名直接調(diào)用實例方法時,Python 并不會自動給 self 參數(shù)傳值。
如果想通過類名直接調(diào)用實例方法,就必須手動為 self 參數(shù)傳值。我們來看看下面的代碼:
#定義一個類class CL: def info(self): print('這是一個類方法')#通過類名直接調(diào)用實例方法d=CL()CL.info(d)運行結(jié)果:這是一個類方法
我們也可以修改代碼,直接傳遞任意的參數(shù):
#定義一個類class CL: def info(self): print(self,'這是一個類方法')#通過類名直接調(diào)用實例方法CL.info('哦,')運行結(jié)果:哦, 這是一個類方法
我們在學(xué)習(xí)類編程的時候,不止一次提到過命名空間。實際上,在所有的class關(guān)鍵字修飾的代碼塊中,都可以看成獨立的空間。
在這個獨立的空間里面,所有的屬性和方法都是獨立的。所有的屬性都是在這個空間里面的變量,所有的方法都是這個空間的函數(shù)。
不過,在程序中我們應(yīng)該如何調(diào)用它們呢?我們來看看一個實例:
a='這是一個全局變量'def say(): print('這是一個全局函數(shù)的方法')class st: def say1(): print('這是一個類空間里面的函數(shù)方法') b='這是一個類空間的變量'print(a)say()print(st.b)st.say1()運行結(jié)果:這是一個全局變量這是一個全局函數(shù)的方法這是一個類空間的變量這是一個類空間里面的函數(shù)方法
我們類命名空間中的變量和函數(shù)在使用時,只需要標(biāo)注 st(類名) 前綴即可。甚至,Python還允許在類命名空間里直接運行可執(zhí)行程序:
class gun: print('這是運行在類的程序') [print(i) for i in range(1,10)] 運行結(jié)果:這是運行在類的程序123456789
通過使用描述符,可以讓程序員在引用一個對象屬性時自定義要完成的工作。一個類可以將屬性管理全權(quán)委托給描述符類。
如果一個類的某個屬性有數(shù)據(jù)描述符,那么每次查找這個屬性時,都會調(diào)用描述符的 __get__() 方法,并返回它的值;同樣,每次在對該屬性賦值時,也會調(diào)用 __set__() 方法。我們可以看看下面的例子:
class Ace: def __init__(self, i = None, name = '描述符的數(shù)據(jù)'): self.v = i self.name = name def __get__(self, a, c): print('這是get查找的',self.name) return self.v def __set__(self, s, b): print('他是',self.name) self.v = bm = Ace(5,'輸入新的變量')print(m.name)class myClass: x = Ace(10,'調(diào)用類輸入的變量')n=myClass()print(n.x)輸出結(jié)果:輸入新的變量這是get查找的 調(diào)用類輸入的變量10
是不是很燒腦,我們可以在后面的學(xué)習(xí)中慢慢深入理解。
繼續(xù)堅持學(xué)習(xí),每天都能進(jìn)步一點?。?!
往期回顧:
本文引用和摘錄相關(guān)內(nèi)容,請聯(lián)系侵刪。
- END -
最后,文章有幫助到你的話【點贊在看】
激勵我們分享更多的干貨