python 方法也是屬性

2022-03-02 12:14:20 字數 1630 閱讀 9804

我們在 class 中定義的例項方法其實也是屬性,它實際上是乙個函式物件:

class

person(object):

def__init__

(self, name, score):

self.name =name

self.score =score

defget_grade(self):

return'a

'p1 = person('

bob', 90)

print

p1.get_grade

#=> >

print

p1.get_grade()

#=> a

也就是說,p1.get_grade 返回的是乙個函式物件,但這個函式是乙個繫結到例項的函式,p1.get_grade() 才是方法呼叫。

因為方法也是乙個屬性,所以,它也可以動態地新增到例項上,只是需要用 types.methodtype() 把乙個函式變為乙個方法:

import

types

deffn_get_grade(self):

if self.score >= 80:

return'a

'if self.score >= 60:

return'b

'return'c

'class

person(object):

def__init__

(self, name, score):

self.name =name

self.score =score

p1 = person('

bob', 90)

p1.get_grade =types.methodtype(fn_get_grade, p1, person)

print

p1.get_grade()

#=> a

p2 = person('

alice

', 65)

print

p2.get_grade()

#error: attributeerror: 'person' object has no attribute 'get_grade'

#因為p2例項並沒有繫結get_grade

給乙個例項動態新增方法並不常見,直接在class中定義要更直觀。

由於屬性可以是普通的值物件,如 str,int 等,也可以是方法,還可以是函式,大家看看下面**的執行結果,請想一想 p1.get_grade 為什麼是函式而不是方法:

class

person(object):

def__init__

(self, name, score):

self.name =name

self.score =score

self.get_grade = lambda: 'a'

p1 = person('

bob', 90)

print

p1.get_grade

print p1.get_grade()

__main__.person object at 0x00000265eca28e48>>a

python中方法也是屬性

我們在 class 中定義的例項方法其實也是屬性,它實際上是乙個函式物件 class person object def init self,name,score self.name name self.score score def get grade self return a p1 perso...

python 類屬性方法 例項屬性方法

型別 描述類變數 靜態變數 所有例項共有,每個例項可以不加self呼叫 類方法 靜態方法 所有例項共有,每個例項都可以呼叫 例項變數 非靜態變數 單個例項所有,需通過self呼叫 例項方法 非靜態方法 單個例項所有,下例中class name是類屬性,所有的例項都具有該屬性,而且任何乙個例項修改都可...

Python屬性和方法

類屬性 類屬性,直接在類中定義的屬性是類屬性,類屬性可以通過類或類的例項訪問到,但是類屬性只能通過類物件來修改,無法通過例項物件修改 例項屬性 例項屬性,通過例項物件新增的屬性屬於例項屬性,例項屬性只能通過例項物件來訪問和修改,類物件無法訪問修改 類方法 例項方法 靜態方法 定義乙個類 class ...