1. 程式人生 > >Python 動態新增屬性及方法

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()

這裡就可以通過物件.具體方法的形式,來呼叫傳遞的方法。

相關推薦

Python 動態新增屬性方法

     Python是一門動態語言,動態語言的一個主要的特性就是你那個在執行時,新增屬性以及方法。不同於靜態語言(例如c,c++,java......)他們都是通過編譯後在執行指定的編譯後的檔案。Python與他們最大的不同就是Python是動態的,程式碼的更改,無需重新編

Python-動態新增屬性方法

class Person():   Country='CN'   def __init__(self,nm)     self.nm=nm 動態新增例項屬性及例項方法: p=Person() p.age=18 #直接賦值,動態新增例項屬性 def set_age(self,age) #定義帶se

python 動態新增屬性方法

首先 動態新增屬性 class Person(object):     def __init__(self, newName, newAge):         self.name = newName         self.age = newAge laowang

python動態新增屬性方法

import types    如果一個類已經寫好  要想動態的新增一新的方法  那麼需要用下面方法: p1.eat = types.MethodType(eat,p1)    //即把eat函式動態繫結到了p1物件上

python基礎之動態新增屬性方法

一、新增物件屬性: >>> class student(object): pass >>> stu=student() >>> stu.name="zhang jie" #新增物件屬性 >>> stu.name 'zh

我的Python學習筆記(四):動態新增屬性方法

一、動態語言相關概念 1.1 動態語言 在執行時程式碼可以根據某些條件改變自身結構 可以在執行時引進新的函式、物件、甚至程式碼,可以刪除已有的函式等其他結構上的變化 常見的動態語言:Object-C、C#、JavaScript、PHP、Python、Erlang 1.2 動態型別語言 在執行期間檢查資料

Python學習筆記——動態新增屬性方法

我們都知道Python是動態語言。 動態?動態在哪裡呢? 假如C語言定義了一個類,我們在類固定的情況下,可以不可以為這個類或者這個類的物件新增物件呢?答案肯定是否定的 但是Python就可以。下面我們來看看。 一.動態新增屬性 1.動態新增物件

js物件動態新增屬性方法

1. 動態新增屬性,方法 var object = new Object(); object.name = "name"; object.age = 19; >>>{name: "name", age: 19} object.fun = function(){   console

Python :動態給例項新增屬性方法

#動態給例項新增屬性的方法 from types import MethodType #動態新增屬性 class Person(object) : pass per = Person() #動態新增屬性,靈活 per.name = "Tom" print(per.name)

python語言是動態語言、給類新增屬性方法、靜態方法和類方法、__slots__()、python中的生成器、yield的用法

程式在查詢變數的定義時遵循LEGB規則 LEGB規則: locals-->enclosing function-->globals-->builtins locals當前所在名稱空間的變數 enclosing外部巢狀函式的名稱空間(閉包中常見) globa

Python中類的屬性方法的總結python改寫memocache啟動指令碼舉例

1.類的屬性總結 類屬性,也是公有屬性, 類的私有屬性, 物件的共有屬性, 物件的私有屬性, 內建屬性, 函式的區域性變數, 全域性變數, #/usr/bin/env python # -*- coding:utf-8 -*- class

筆記:利用 runtime 交換方法、給分類動態新增屬性

第一次寫部落格,有些小緊張,如有不對的地方還請大牛們及時指出,在此先感謝各位大牛了... 一、利用 runtime 交換方法: 1、交換方法的實現 #import "UIImage+mImage.h" @implementation UIImage (mImage) +(void)l

動態-JS實現給物件動態新增屬性並賦值 實現AJAX data傳遞動態key鍵名

對前段工作時間中遇到的兩種自認為比較有意義的JS動態操作資料的情況進行總結: 1.JS實現物件的動態新增屬性並賦值 例:點選觸發  通過類選擇器遍歷所有的input 並將其對應實體類的屬性及屬性值動態新增到info物件中,請求到後臺. var info = {}; $("#

python request屬性方法說明

if  request.REQUEST.has_key('鍵值'): HttpRequest物件的屬性 參考: 表 H-1. HttpRequest物件的屬性 屬性 描述 path 表示提交請求頁面完整地址的字串,不包括域名,如"/m

Python程式設計:類的例項動態增加屬性方法

# -*- coding: utf-8 -*- # @File : 類的例項動態增加屬性和方法.py # @Date : 2018-05-31 # @Author : Peng Shiy

android在java程式碼中動態新增元件相關佈局方法(LayoutParams)

一、前言 Android的介面佈局可以用兩種方法,一種是在xml中佈局,一種是在JAVA程式碼中實現介面的佈局。前者佈局是很方便的,但是對於需要動態的顯示介面,這個時候xml就缺少了一種靈活性。有一個需求:針對listView或者RecyclerVi

Python學習筆記(一):list屬性方法淺析

列表學習。 List是python中的基本資料結構之一。建立一個列表的方法 L = [1,2,3,'a'] 通過help(list)檢視列表的屬性及方法。 >>> help(list) Help on class list in module builti

ios動態新增屬性的幾種方法

在ios執行過程中,有幾種方式能夠動態的新增屬性。 1-通過runtime動態關聯物件 主要用到了objc_setAssociatedObject,objc_getAssociatedObject以及objc_removeAssociatedObjects //在目標t

js 建立物件的三種方式 獲取屬性新增屬性方法

1:直接量法 var obj = { } ;//這是一個空物件 var point = {x:0,y=0}; //point物件有兩個屬性 x 和 y 2.通過new 建立物件 var

Ext.grid.GridPanel屬性方法

ble sse rst 可能 colspan ask gridpanel ted elm Ext.grid.GridPanel屬性及方法等 1、Ext.grid.GridPanel主要配置項:store:表格的數據集columns:表格列模式的配置數組,可自動創建