Python3 元類程式設計

2021-10-07 15:48:26 字數 2343 閱讀 8394

在python中一切接物件,類也是乙個物件,所有的類都是有type類建立,我們實際開發中最常用的type方法,是用來獲取某個物件的型別的,例如type(1) ⇒ int 、type(『str』) ⇒ str。但是type還有一種用法,就是用來建立類的。

1、通過type動態建立無父類、無屬性的類

people =

type

('people',(

),)p = people(

)print

(p)

2、通過type動態建立有父類、無屬性的類
class

animal

(object):

name =

'動物類'

public =

'類變數'

def__init__

(self, name)

: self.name = name

dog =

type

('dog'

,(animal,),

)d = dog(

'哈士奇'

)print

(d)print

(dog.__bases__)

print

(dog.__mro__)

print

(d.name)

print

(d.public)

3、通過type動態建立有父類、有屬性的類
class

animal

(object):

name =

'動物類'

public =

'類變數'

def__init__

(self, name)

: self.name = name

dog =

type

('dog'

,(animal,),

)# 新增乙個age屬性

d = dog(

'哈士奇'

)print

(d)print

(dog.__bases__)

print

(dog.__mro__)

print

(d.name)

print

(d.public)

print

(d.age)

# 通過type動態建立有類,新增類方法、靜態方法、例項方法

@classmethod

defeat

(cls)

:print

('類方法'

)@staticmethod

defsay()

:print

('靜態方法'

)def

get_age

(self)

:print

('今年%d歲了'

% self.age)

people =

type

('people',(

),)p = people(

)people.eat(

)p.eat(

)p.say(

)people.say(

)p.get_age(

)

4、在編寫類時,更改元類,使用自建的元類來建立類

__metaclass__屬性,python會在類的定義中尋找__metaclass__屬性,如果找到了,python就會用它來建立類,如果沒有找到,就會用內建的type來建立這個類

def

upper_attr

(cls, bases, attrs)

:'''

自定義元類,將所有的共有屬性名都變成大寫的屬性名

'''newattr =

for key, val in attrs.items():

ifnot key.startswith(

'__'):

newattr[key.upper()]

= val

return

type

(cls, bases, newattr)

class

people

(object

, metaclass=upper_attr)

: name =

'asd'

age =

18p = people(

)print

(p.name)

# p.name 會報屬性找不到

print

(p.age)

python3元類 python3元類的呼叫順序

在嘗試理解元類建立類例項的順序時,我感到困惑.根據該圖 source 我鍵入以下 進行驗證.class meta type def call self print meta call super meta,self call def new mcs,name,bases,attrs,kwargs p...

Python3 元類拓展

自定義元類控制類的建立 class mymeta type def init self,class name,class bases,class dic if not class name.istitle raise typeerror 類名首字母必須大寫 if doc not in class d...

python3元組 Python3元組

python的元組與列表相似,不同之處在於元組的元素不能修改 元組使用小括號,列表使用方括號 元組建立很簡單,只需要在括號中新增元素,並使用逗號隔開即可。建立空元組 tup1 tup2 1,元組只包含乙個元素時,需要在元素後面新增逗號,否則括號會被當作運算子使用 元組與字串類似,下標索引從0開始,可...