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命令來做出定義...