日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 定义method_python进阶14:实例方法和类方法、types.MethodType()

發布時間:2023/12/10 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 定义method_python进阶14:实例方法和类方法、types.MethodType() 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 實例方法

一個實例的私有屬性就是以__開頭的屬性,無法被外部訪問,那這些屬性定義有什么用?雖然私有屬性無法從外

部訪問,但是,從類的內部是可以訪問的。除了可以定義實例的屬性外,還可以定義實例的方法。實例的方法就是在

類中定義的函數,它的第一個參數永遠是 self,指向調用該方法的實例本身,其他參數和一個普通函數是完全一樣

的:

class Person(object):

def __init__(self, name):

self.__name = name

def get_name(self):

return self.name

get_name(self) 就是一個實例方法,它的第一個參數是self。__init__(self, name)其實也可看做是一個特殊的

實例方法。調用實例方法必須在實例上調用:

>>> p1 = Person('Bob')

>>> print p1.get_name() #self不需要傳入

Bob

在實例方法內部,可以訪問所有實例屬性,這樣,如果外部需要訪問私有屬性,可以通過方法調用獲得,這種數

據封裝的形式除了能保護內部數據一致性外,還可以簡化外部調用的難度。

2?types.MethodType()

因為方法也是一個屬性,所以,它也可以動態地添加到實例上,只是需要用types.MethodType()把一個函數變

為一個方法:

import types

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

下面我們將fn_get_grade()方法添加到實例上:

>>> 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方法,所以出現錯誤。

3 定義類方法

和屬性類似,方法也分實例方法和類方法。

在class中定義的全部是實例方法,實例方法第一個參數 self 是實例本身。定義類方法需要在方法前加上

@classmethod:

class Person(object):

count = 0

@classmethod

def how_many(cls):

return cls.count

def __init__(self, name):

self.name = name

Person.count = Person.count + 1

print Person.how_many()

p1 = Person('Bob')

print Person.how_many()

通過標記一個 @classmethod,該方法將綁定到 Person 類上,而非類的實例。類方法的第一個參數將傳入類本

身,通常將參數名命名為 cls,上面的 cls.count 實際上相當于 Person.count。因為是在類上調用,而非實例上調

用,因此類方法無法獲得任何實例變量,只能獲得類的引用。

總結

以上是生活随笔為你收集整理的python 定义method_python进阶14:实例方法和类方法、types.MethodType()的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。