Python中類的方法屬性與方法屬性的動態繫結

2021-07-29 09:13:05 字數 2563 閱讀 3835

最近在

學習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 中一切皆為物件,所謂物件 我們自己就是乙個物件,我們玩的電腦就是物件,坐著的椅子就是物件,家裡養的小狗也是乙個物件.我們通過描述屬性 特徵 和行為來描述乙個物件的。比如家裡的小狗,它的顏色,大小,年齡,體重等是它的屬性或特徵。它會汪汪叫,會搖尾巴等是它的行為。我們在描述乙個真實物件 物...