Python 動態添加屬性及方法

     Python是一門動態語言,動態語言的一個主要的特性就是你那個在運行時,添加屬性以及方法。不同於靜態語言(例如c,c++,java......)他們都是通過編譯後在運行指定的編譯後的文件。Python與他們最大的不同就是Python是動態的,代碼的更改,無需重新編譯即可啓動。

     無需編譯,對我們開發來說可以方便很多,假如一個程序很大的情況下。我們修改的需要給程序添加一段代碼,或者某個屬性,但是需要重新編譯和運行,大大降低了我們的開發效率。Python可以實現動態的添加,下面將通過代碼展示Python動態添加屬性及方法的實例。

class Person(object):

    def __init__(self, height, weight):
        self.height = height
        self.weight = weight
        print('xx身高%d,體重%d' % (self.height, self.weight))
這裏假如我們創建了一個Person類,在初始化方法中添加了身高體重屬性,創建完對象傳入相應的參數,就會給對象的屬性賦值傳入的參數。如果直接通過對象.未知屬性的方式,可以給對象成功添加屬性,也可以通過類名.未知屬性的方式,給類屬性賦值。
person = Person(170, 75)
# 對象賦值
person.age = 107
print(person.age)
# 類賦值
Person.name = "jerry"
print(Person.name)

給對象動態添加方法(函數)

這裏我們可以先創建一個函數

def study(self):
    print('%s我是一個學生', self.name)

創建了一個study,方法(函數),如果想要將函數賦值給對象,這時候就不能向給屬性賦值的方式來給對象動態添加方法了,Python提供了一個方法,通過types模塊中的MethodType給對象添加方法。

 MethodType = class method(object)
     |  method(function, instance)
     |  
     |  Create a bound instance method object.
     |  
     |  Methods defined here:

我們可以看一下MethodType方法需要傳遞的參數,第一個是function,第二個是instance,第一個參數時我們需要傳遞的函數(方法),第二個參數是我們需要給的對象,通過這種方式可以給對象添加具體的方法。

person.study = types.MethodType(study, person)
person.study()

這裏就可以通過對象.具體方法的形式,來調用傳遞的方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章