入門 Python中的繫結

2021-08-14 08:48:39 字數 4000 閱讀 7259

python嚴格要求需要有例項才能呼叫方法,這種限制實際上就是python的繫結機制

>>> 

class

a:def

printa

(): print("life is short")

>>> a.printa()

life is short

這麼做會存在乙個問題,就是根據類例項化後的物件無法使用類裡面的函式

>>> a = a()

>>> a.printa()

traceback (most recent call last):

file "", line

1, in

a.printa()

typeerror: printa() takes 0 positional arguments but 1 was given

在深入了解一下

>>> 

class

c:def

setxy

(self,x,y):

self.x = x

self.y = y

defprintxy

(self):

print(self.x,self.y)

​>>> d = c()

使用dict檢視物件擁有的屬性

>>> d.__dict__

{}>>> c.__dict__

of'c' objects>, '__weakref__': '__weakref__'

of'c' objects>, '__doc__': none})

dict屬性由乙個字典組成,鍵表示屬性名,值表示資料值。

>>> d.setxy(8,9)

>>> d.__dict__

把類例項刪除掉,例項物件d仍然能呼叫printxy

>>> 

del c

>>> d.printxy()

89

issubclass(class,classinfo)

如果第乙個引數(class)是第二個引數(classinfo)的乙個子類,返回true,否則返回false:

>>> 

class

a:pass

​>>>

class

b(a):

pass

​>>> issubclass(b,a)

true

>>> issubclass(b,b)

true

>>> issubclass(b,object)

true

>>>

class

c:pass

​>>> issubclass(b,c)

false

isinstance(object,classinfo)如果第乙個引數(object)是第二個引數(classinfo)的例項物件,則返回true,否則返回false:

>>> b1 = b()

>>> isinstance(b1,b)

true

>>> isinstance(b1,c)

false

>>> isinstance(b1,a)

true

>>> isinstance(b1,(a,b,c))#只要class是其中任何乙個候選類的子類,就返回true.

true

hasattrr(object,name)attr是attribute的縮寫,是屬性的意思。

>>> 

class

c:def

__init__

(self,x=0):

self.x = x

​>>> c = c()

>>> hasattr(c,'x') # 屬性名要用引號括起來

true

getattr(object,name[,default])返回物件指定的屬性值,如果指定的屬性不存在,則返回default(可選引數)的值;若沒有設定default引數,則丟擲arttributeerror異常。

>>> getattr(c,'x')

0>>> getattr(c,'y')

traceback (most recent call last):

file "", line 1, in

getattr(c,'y')

attributeerror: 'c' object has no attribute 'y'

>>> getattr(c,'y','您所訪問的屬性不存在')

'您所訪問的屬性不存在'

setattr(object,name,value)與getattr()對應,setattr()可以設定物件中指定屬性的值,如果指定的屬性不存在,則會新建屬性並賦值。

>>> setattr(c,'y','billep')

>>> getattr(c,'y')

'billep'

delattr(object,name)與setattr()相反,delattr()用於刪除物件中指定的屬性,如果屬性不存在,則會丟擲attributeerror異常。

>>> delattr(c,'y')

>>> delattr(c,'z')

traceback (most recent call last):

file

"", line 1, in

delattr(c,'z')

attributeerror

: z

property(fget = none,fset = none,fdel = none,doc = none)作用是通過屬性來設定屬性。

class

c:def

__init__

(self,size = 10):

self.size = size

defgetsize

(self):

return self.size

defsetsize

(self,value):

self.size = value

defdelsize

(self):

del self.size

x = property(getsize,setsize,delsize)

​>>> c = c()

>>> c.x

10>>> c.x = 12

>>> c.x

12>>> c.size

12>>>

del c.x

>>> c.size

traceback (most recent call last):

file "", line 1, in

c.size

attributeerror: 'c' object has no attribute 'size'

property()返回乙個可以設定屬性的屬性,有了property()使用者訪問size屬性只提供了x屬性,無論內部怎麼改動,只需要相應的修改property()的引數,使用者只需要去操作x屬性即可。

Python中的延遲繫結

延遲繫結出現在閉包問題中。下面我們看乙個閉包的例子 def gen mul n defmul x return n x return mul double gen mul 2 double value double 6 print double value 可以看出滿足閉包的幾點 閉包的優點 閉包的...

Python中繫結與未繫結的類方法

像函式一樣,python中的類方法也是一種物件。由於既可以通過例項也可以通過類來訪問方法,所以在python裡有兩種風格 未繫結的類方法 沒有self 通過類來引用方法返回乙個未繫結方法物件。要呼叫它,你必須顯示地提供乙個例項作為第乙個引數。繫結的例項方法 有self 通過例項訪問方法返回乙個繫結的...

python中函式的入門

python中函式形式諸如f x 前面為函式名稱,使用英文的小括號來包裹引數,括號裡面的即為函式的傳入引數。分為內建函式和自定義函式兩類。所謂的內建函式,即python語言中常用的 自帶的函式,如print len 等。自定義函式則是根據作者的需要自己創造出來的函式運算方式。使用def命令來做出定義...