我們在 class 中定義的例項方法其實也是屬性,它實際上是乙個函式物件:
classperson(object):
def__init__
(self, name, score):
self.name =name
self.score =score
defget_grade(self):
return'a
'p1 = person('
bob', 90)
p1.get_grade
#=> >
p1.get_grade()
#=> a
也就是說,p1.get_grade 返回的是乙個函式物件,但這個函式是乙個繫結到例項的函式,p1.get_grade() 才是方法呼叫。
因為方法也是乙個屬性,所以,它也可以動態地新增到例項上,只是需要用 types.methodtype() 把乙個函式變為乙個方法:
importtypes
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)
p1.get_grade()
#=> a
p2 = person('
alice
', 65)
p2.get_grade()
#error: attributeerror: 'person' object has no attribute 'get_grade'
#因為p2例項並沒有繫結get_grade
給乙個例項動態新增方法並不常見,直接在class中定義要更直觀。
由於屬性可以是普通的值物件,如 str,int 等,也可以是方法,還可以是函式,大家看看下面**的執行結果,請想一想 p1.get_grade 為什麼是函式而不是方法:
classperson(object):
def__init__
(self, name, score):
self.name =name
self.score =score
self.get_grade = lambda: 'a'
p1 = person('
bob', 90)
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 ...