最近在
學習python
,純粹是自己的興趣愛好,然而並沒有系統地看python
程式設計書籍,覺得上面描述過於繁瑣,在**找了一些學習的**,發現廖雪峰老師的**上面的學習資源很不錯,而且言簡意賅,提取了一些
python
python
的執行**,缺點就是沒有系統的看
python
的書籍,不能及時的將知識的碎片化聯絡在一起,這也是看書與不看書的區別。尤其是在
python
類與例項的方法的呼叫中覺得雲裡霧裡,思考之後將自己的想法記錄下,一來加深自己理解,鞏固自己記憶,而來幫助一些想要學習
python
的朋友理解這門抽象的語言,理解不當之處,希望大家給予指正,謝謝。 1
、python
中的類與例項
先定義乙個類
class
student
(object):
初始化,將一些必要屬性繫結到student
類中 def
__init__
(self, name, score):
self.name = name
self.score = score
在內部定義乙個函式,實現對傳入例項的屬性操作,將資料進行封裝在內部,這些封裝的資料本身適合類進行關聯的,稱之為類的方法。
defprint_score
(self):
print('%s: %s' % (self.name, self.score))
2 、對例項擁有的屬性與方法的呼叫
傳入乙個例項
bart = student('bart simpson', 59)
對屬性的呼叫
>>> bart.name'bart simpson'
對方法的呼叫
>>> bart.print_score()
bart simpson: 59
都沒有問題,以下來理解python
中例項中屬性與方法的繫結 3
、python
中例項屬性與方法繫結
先定義乙個類
class
student
(object):
pass
傳入乙個例項
s = student()
動態給例項繫結乙個屬性 s.
name
= 'michael'
接下來給例項繫結方法
先定義乙個函式
defset_age
(self, age): #
定義乙個函式作為例項方法
self.age = age
對例項的方法繫結
from
types
import
methodtype
s.set_age = methodtype(set_age, s) #
給例項繫結乙個方法
s.set_age(25) #
呼叫例項方法
>>> s.age #
測試結果25
對類的方法繫結
defset_score
(self, score):#
定義乙個函式作為類的方法
self.score = score
student.set_score = set_score#
繫結方法
廖老師在後面補充了一句:
set_score
方法可以直接定義在class
中,但動態繫結允許我們在程式執行的過程中動態給
class
加上功能,這在靜態語言中很難實現。
我理解的意思是,一般的對於定義乙個類,會在類進行初始化的時候進行屬性的繫結,傳入例項的時候直接傳入帶引數的例項,通過內部定義的一些方法,就直接可以對例項的屬性和例項繼承於類的方法進行資料操作,引用,例如***.name ***.print_name
的形式。但是如果定義的類沒有初始化,基於
python
語言良好的動態繫結的屬性,我們可以對傳入的例項進行例項和方法的繫結,對屬性的繫結比較簡單,對方法的繫結需要通過
from types import methodtype
的形式,(其他的形式暫時還不知道),告訴直譯器
s.set_age
的方法操作是將
set_age
函式繫結
s 即
s.set_age = methodtype(set_age, s)
,這樣python
就知道怎樣執行s的
set_age
方法。但是這樣繫結方法只能對類中的繫結的方法例項起效,要想對類中所有例項生效需要動態的對類進行方法的繫結。就像我們上面看到的一樣。繫結之後,接下來就直接可以類似於
***.name ***.print_name
的形式進行呼叫了。
對於方法是否能夠直接呼叫,在於定義的函式是否在
類中的定義還是基於
函式的定義
,對於不在類中定義的函式,實現對例項的方法操作就需要進行動態的繫結,或者對例項所屬的類進行方法繫結;而在類中定義的函式即方法,在例項中可以直接進行呼叫。
Python 靜態方法,類方法,屬性方法
1.靜態方法 靜態方法 只是名義上歸類管理,實際上在靜態方法中訪問不了類和例項 class person object def init self name self.name name staticmethod 截斷類與函式關係,不能呼叫類變數 def eat print s is eating ...
python類方法 靜態方法 屬性方法
staticmethod和 classmethod都可以直接類名.方法名 來呼叫,那他們有什麼區別呢?從它們的使用上來看 staticmethod不需要表示自身物件的self和自身類的cls引數,就跟使用函式一樣。classmethod也不需要self引數,但第乙個引數需要是表示自身類的cls引數。...
python類 物件 方法 屬性之類與物件
python 中一切皆為物件,所謂物件 我們自己就是乙個物件,我們玩的電腦就是物件,坐著的椅子就是物件,家裡養的小狗也是乙個物件.我們通過描述屬性 特徵 和行為來描述乙個物件的。比如家裡的小狗,它的顏色,大小,年齡,體重等是它的屬性或特徵。它會汪汪叫,會搖尾巴等是它的行為。我們在描述乙個真實物件 物...