python 动态加载与静态加载_python中的元类、静态方法、类方法,动态添加方法...
首先介紹幾個概念:
1、#所謂的靜態方法就是這個方法任何類都可以調用,程序一加載就存在的方法
2、所謂的類方法就是這個類一加載就存在的方法,不用實例化這個類就已經存在的方法
3、所謂的元類就是創建類的類
元類: type
我們知道對象是通過構造函數來初始化的,name對象到底是誰創建的呢。其實我們再之前就接觸過元類。例如我們創建整形類用int,創建字符串類用str,那么我們創建對象類使用什么來創建的。這里我們就提到了type這個元類。
type是創建類的元類,就像認識形態領域的元認知是對認知的認知。
舉例:
@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
打印結果
smile.........
hongbiao
25
True
runing.......
eat.......hhh
smile.........
從上面我們可以得到type這個就是元類,通過這個原來來創建對象, 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接收三個參數,分別是對象名稱,繼承內容也就是一般類后面的括號,第三個參數是一個字典類型,用來存貯屬性。
這里的屬性分為一般屬性,靜態屬性,和類屬性
靜態屬性需要使用裝飾器staticmethod修飾,而類屬性需要用classmethod來修飾
python動態添加方法
python 作為一門動態的語言,可以在代碼執行的過程中來添加方法
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)
# 執行完上面的代碼之后下面再調用這個方法就不會報錯了
p.run()
# 打印結果:"running.........."
---------------------
作者:京城最明亮的少年
來源:CSDN
原文:https://blog.csdn.net/jeekmary/article/details/82289125
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
總結
以上是生活随笔為你收集整理的python 动态加载与静态加载_python中的元类、静态方法、类方法,动态添加方法...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 及时复盘的好处_该如何复盘 先来说说复盘
- 下一篇: 华为畅玩5刷机不用电脑连接(华为畅玩5怎