Python程式設計 元類的簡單使用

2021-09-21 06:39:19 字數 2453 閱讀 4040

python 2.7.5 舊式類

class

foo():

pass

foo = foo(

)print

(type

(foo)

)print

(type

(foo)

)print

(type

(type))

# #

#

python 3.6.5 新式類

class

foo():

pass

foo = foo(

)print

(type

(foo)

)print

(type

(foo)

)print

(type

(type))

# #

#

type是乙個元類,任何類都是它的例項。

就像乙個普通的物件是乙個類的例項一樣

python中的任何新式類 以及 python3中的任何類 都是type元類的乙個例項

x是類foo的乙個例項。

foo是type元類的乙個例項。

type也是type元類的乙個例項,所以它是它自己的乙個例項。

以下測試,在python 3.6.5 中完成

type函式

type(, , )

類名稱 __name__屬性

繼承類的基類元組,__bases__屬性

包含類主體定義的命名空間字典,__dict__屬性

例如

# -*- coding: utf-8 -*-

defget_name

(self)

:return

"foo"

# 定義類

foo =

type

("foo",(

object,)

,)foo = foo(

)# 獲取屬性

print

(foo.name)

# foo

# 呼叫方法

print

(foo.get_name())

# foo

以上定義的類相當於

class

foo(

object):

name =

"foo"

defget_name

(self)

:return

"foo"

通過元類的方式給子類新增屬性

# -*- coding: utf-8 -*-

class

meta

(type):

def__new__

(cls, name, bases, dct)

: instance =

super()

.__new__(cls, name, bases, dct)

instance.name =

"meta"

return instance

class

foo(metaclass=meta)

:pass

print

(foo.name)

# meta

通過繼承的方式給子類新增屬性

# -*- coding: utf-8 -*-

class

base

(object):

name =

"meta"

class

foo(base)

:pass

print

(foo.name)

# meta

通過類裝飾器的方式給子類新增屬性

# -*- coding: utf-8 -*-

defdecorator

(cls)

:class

newclass

(cls)

: name =

"meta"

return newclass

@decorator

class

foo(

object):

pass

print

(foo.name)

# meta

參考

python黑魔法:元類

python 元類程式設計 python的元類程式設計

一 property動態屬性 給類中的乙個方法函式加上 property裝飾器,將這個方法變成屬性描述符,將獲取方法變為獲取屬性。class user def init self,name,birthday self.name name self.birthday birthday property...

python元類的使用 Python的元類如何使用

這次給大家帶來python的元類如何使用,使用python元類的注意事項有哪些,下面就是實戰案例,一起來看一下。今天我的任務就是徹底明白什麼是元類,一起看看。要搞懂元類,我們還是先從物件說起。python 一切皆物件,這句話你一定有聽說過 現在你就聽說了 乙個數字是物件,乙個字串是物件,乙個列表是物...

python元類的使用 python使用元類

原文 type 動態語言和靜態語言最大的不同,就是函式和類的定義,不是編譯時定義的,而是執行時動態建立的。比方說我們要定義乙個hello的class,就寫乙個hello.py模組 當python直譯器載入hello模組時,就會依次執行該模組的所有語句,執行結果就是動態建立出乙個hello的class...