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

歡迎訪問 生活随笔!

生活随笔

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

python

python 动态加载与静态加载_python中的元类、静态方法、类方法,动态添加方法...

發(fā)布時間:2023/12/3 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 动态加载与静态加载_python中的元类、静态方法、类方法,动态添加方法... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先介紹幾個概念:

1、#所謂的靜態(tài)方法就是這個方法任何類都可以調(diào)用,程序一加載就存在的方法

2、所謂的類方法就是這個類一加載就存在的方法,不用實例化這個類就已經(jīng)存在的方法

3、所謂的元類就是創(chuàng)建類的類

元類: type

我們知道對象是通過構(gòu)造函數(shù)來初始化的,name對象到底是誰創(chuàng)建的呢。其實我們再之前就接觸過元類。例如我們創(chuàng)建整形類用int,創(chuàng)建字符串類用str,那么我們創(chuàng)建對象類使用什么來創(chuàng)建的。這里我們就提到了type這個元類。

type是創(chuàng)建類的元類,就像認識形態(tài)領(lǐng)域的元認知是對認知的認知。

舉例:

@staticmethod

def run():

print("runing.......")

def eat(self,food):

print("eat......."+food)

@classmethod

def smile(cls):

print("smile.........")

def createObvject():

p1 = type("Person", (), {"name": "hongbiao", "age": 25, "run": run,"eat": eat,"smile":smile})

return p1

if __name__ == '__main__':

per = createObvject()

per.smile()

person = per()

print(person.name)

print(person.age)

print(hasattr(per, "name"))

person.run()

person.eat("hhh")

person.smile()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

打印結(jié)果

smile.........

hongbiao

25

True

runing.......

eat.......hhh

smile.........

從上面我們可以得到type這個就是元類,通過這個原來來創(chuàng)建對象, createObvject里面封裝了type,返回一個對象,注意是返回一個對象而不是實例對象。per()表示實例化一個對象。

分析type這個方法:

源碼如下:

def __init__(cls, what, bases=None, dict=None): # known special case of type.__init__

"""

type(object_or_name, bases, dict)

type(object) -> the object's type

type(name, bases, dict) -> a new type

# (copied from class doc)

"""

pass

1

2

3

4

5

6

7

8

type接收三個參數(shù),分別是對象名稱,繼承內(nèi)容也就是一般類后面的括號,第三個參數(shù)是一個字典類型,用來存貯屬性。

這里的屬性分為一般屬性,靜態(tài)屬性,和類屬性

靜態(tài)屬性需要使用裝飾器staticmethod修飾,而類屬性需要用classmethod來修飾

python動態(tài)添加方法

python 作為一門動態(tài)的語言,可以在代碼執(zhí)行的過程中來添加方法

def run(self):

print("running..........")

import types

class Person(object):

def __init__(self, name=None,age=None):

this.name = name

this.age = age

def eat(self):

print("eat...........")

p = Person("hb", 26)

p.eat()#正常

p.run()#報錯,因為run并不是Person的方法

# 那么我們想添加進去,怎么弄呢

import types

p.run =? types.MethodType(run,p)

# 執(zhí)行完上面的代碼之后下面再調(diào)用這個方法就不會報錯了

p.run()

# 打印結(jié)果:"running.........."

---------------------

作者:京城最明亮的少年

來源:CSDN

原文:https://blog.csdn.net/jeekmary/article/details/82289125

版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!

總結(jié)

以上是生活随笔為你收集整理的python 动态加载与静态加载_python中的元类、静态方法、类方法,动态添加方法...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。