我們在 class 中定義的例項方法其實也是屬性,它實際上是乙個函式物件:
class person(object):也就是說,p1.get_grade 返回的是乙個函式物件,但這個函式是乙個繫結到例項的函式,p1.get_grade() 才是方法呼叫。def __init__(self, name, score):
self.name = name
self.score = score
def get_grade(self):
return 'a'
p1 = person('bob', 90)
print p1.get_grade
# => >
print p1.get_grade()
# => a
因為方法也是乙個屬性,所以,它也可以動態地新增到例項上,只是需要用 types.methodtype() 把乙個函式變為乙個方法:
import types給乙個例項動態新增方法並不常見,直接在class中定義要更直觀。def fn_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
由於屬性可以是普通的值物件,如 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()
?不會了怎麼辦
直接把 lambda 函式賦值給self.get_grade 和繫結方法有所不同,函式呼叫不需要傳入 self,但是方法呼叫需要傳入 self。
python 方法也是屬性
我們在 class 中定義的例項方法其實也是屬性,它實際上是乙個函式物件 class person object def init self,name,score self.name name self.score score defget grade self return a p1 person...
C 中方法,屬性與索引器
c 中方法,屬性與索引器 todo 1,關於系統中常常出現的通過某一字段,查詢相應實體資訊 可能是一條欄位或一條資料和一組泛型集合 解說篇 1,方法,2,屬性3。索引器 1。方法 1。依據狀態編碼返回狀態名稱 一條欄位2。依據狀態返回一條資料 實體 1,依據狀態編碼返回狀態名稱 一條字段 依據狀態返...
Python 類中方法的總結
python類 class 中方法的總結 1 例項方法 物件方法 定義格式 def 例項方法名 self pass 呼叫格式 物件名.例項方法名 使用場景 在方法中需要self 物件 2 類方法 定義格式 classmethod def 類方法名 cls pass 呼叫格式 類名.類方法名 或者 物...