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...