元類被稱為 Python 中的「深奧的巫術「

2021-09-25 23:46:18 字數 1899 閱讀 5900

一切皆物件

一切都有型別

「class」和「type」之間本質上並無不同

類也是物件

它們的型別是 type

以前,術語 type 用於內建型別,而術語 class 用於使用者定義的類,但自 pythoon 2.2 以來「class」和「type」本質上並無不同。

對於舊風格(old-style)類的型別是 types.classtype

類的類是……

它的元類……

就像物件是類的例項一樣,類是它的元類的例項。

呼叫元類可以建立類。

確切來說,python 中的其它物件也是如此。

因此當你建立乙個類時……

直譯器會呼叫元類來生成它……

a = 10  # a是整型物件

print(type(a)) # class person:

pass

p = person()

print(type(p))

#print(type(int)) # print(type(person))

## class student:

# '''

# 這個是乙個學生類

# '''

# type1 = '學生'

## def __init__(self, name):

# self.name = name##

# s = student('tom')

# print(student.__dict__)

student = type('student', (object,), )

print(type(student))

s = student()

print(s)

print(type(object))

class listmetaclass(type):

def __new__(cls, name, bases, attrs):

print(name)

print(bases)

print(attrs)

attrs['b'] = 'world'

if attrs.get('test'):

attrs.pop('test')

return type.__new__(cls, name, bases, attrs)

class mylist(object, metaclass=listmetaclass):

a = 'hello'

def test(self):

print('---->test')

l = mylist()

print(l)

print(l.a)

# print(l.b)

l.test()

''' type() ----> 用來構建所有型別的類

用法:1.type(物件) ----》 返回的是物件的型別

2.type(name,bases,attrs) ----> name 類名 bases: tuple儲存的是所有的父類 attrs:{} 字典 類中的所有的屬性

所有的類底層都是經過type構建出來的。

自定義元類:

class ***(type):

def __new__(cls,name,bases,attrs):

do something

....

return type.__new__(cls,name,bases,attrs)

class student(父類,metaclass=***):

pass

元類它只做了三件事:

攔截類的建立

修改類返回修改之後的類

'''

mysql中公共欄位被稱為 mysql中的字段型別

mysql支援大量的列型別,它可以被分為3類 數字型別 日期和時間型別以及字串 字元 型別。本節首先給出可用型別的乙個概述,並且總結每個列型別的儲存需求,然後提供每個類中的型別性質的更詳細的描述。概述有意簡化,更詳細的說明應該考慮到有關特定列型別的附加資訊,例如你能為其指定值的允許格式。由mysql...

被稱為「膠水語言」的Python,學了有什麼用呢?

當涉及資料科學 統計學 分析 ml 時,pyhton 是你最想使用的語言之一。python 是一門通用的程式語言,不僅可以用於統計程式設計,還可以用於開發遊戲 商業應用程式,等等。它很容易成為程式設計師理想的程式語言,你不僅可以用它賺到錢,還能在很快的時間內學到很多東西。2 web開發 python...

python中的元類

python中的元類大家都可能比較很陌生,因為大家都聽說過99 的情況下是用不到元類的,但是大家對類確很了解,大家都知道在python中萬物皆物件,那麼python中的類是不是物件呢?物件的樣子 1,物件可以在程式中動態的進行建立,python的語言動態特性。2,物件可以通過 class 獲取該物件...