python 什麼是原類 Python學習筆記

2021-10-20 01:40:25 字數 1429 閱讀 2464

# 這是學習廖雪峰老師python教程的學習筆記

1、概覽

動態語言和靜態語言最大的不同,就是函式和類的定義,不是編譯時定義的,而是執行時動態建立的。

1.1、type()

class的定義是執行時動態建立的,而建立class的方法就是使用type()函式。

通過type()函式建立的類和直接寫class是完全一樣的,因為python直譯器遇到class定義時,僅僅是掃瞄一下class定義的語法,然後呼叫type()函式建立出class。

type()函式既可以返回乙個物件的型別,又可以建立出新的型別,比如,我們可以通過type()函式建立出hello類:

>>> def fn(self, name='world'): # 先定義函式

...     print('hello, %s.' % name)

>>> hello = type('hello', (object,), dict(hello=fn)) # 建立hello class

type()函式的3個引數:class的名稱;

繼承的父類集合,注意python支援多重繼承,如果只有乙個父類,別忘了tuple的單元素寫法;

class的方法名稱與函式繫結,這裡我們把函式fn繫結到方法名hello上。

1.2、metaclass

除了使用type()動態建立類以外,要控制類的建立行為,還可以使用metaclass。

先定義metaclass,就可以建立類,最後可以建立例項

用metaclass給自定義的mylist類增加乙個add方法:

#metaclass是類的模板,所以必須從`type`型別派生:

class listmetaclass(type): #metaclass的類名總是以metaclass結尾,以便清楚地表示這是乙個metaclass

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

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

class mylist(list, metaclass=listmetaclass): #指示使用listmetaclass來定製類,傳入關鍵字引數metaclass

pass

當我們傳入關鍵字引數metaclass時,魔術就生效了,它指示python直譯器在建立mylist時,要通過listmetaclass.__new__()來建立,在此,我們可以修改類的定義,比如,加上新的方法,然後,返回修改後的定義。

__new__()方法接收到的引數依次是:當前準備建立的類的物件;

類的名字;

類繼承的父類集合;

類的方法集合。

什麼時候需要metaclass?

直接在mylist定義中寫上add()方法是更簡單。正常情況下,我們用不上metaclass。但是,總會遇到需要通過metaclass修改類定義的。orm就是乙個典型的例子。

python是什麼類 Python中什麼是類與物件

python中什麼是類與物件 閱讀 84 類的概念與定義 在生活中,我們走在路邊,看到一輛車,大腦中首先想到的是 這是一輛車,然後才是這是一輛什麼牌子的車 在這裡,我們就用到了程式設計中的類的概念。同樣的,看到一條小狗,也會先想到這是一條狗,然後會想到這是一條什麼品種的狗。在程式設計中,把同一類的事...

python 什麼是類學習筆記

類 各個種類,如電子類 家具類 服飾類 食品類 例項 類的個例就叫做例項 instance 可理解為 實際的例子 類的建立 class 類名 冒號 自動檢測 class leiming pass 這裡記得縮排 類的屬性建立 通過賦值語句 自動檢測 下面的 a 是變數 a 1 下面的 a 是類 a 的...

什麼是基類,什麼是父類

基類就是父類,派生類就是子類 你可以理解為生活中的父子關係,也就是說兒子繼承了所有的父親的樣貌特徵,但是兒子也有父親所沒有的一些特點 專業點講,就是子類可以繼承並使用父類的屬性和方法,也可以有自己的屬性和方法!不知道這麼說你能理解不?這裡又要講到一些繼承的特性 繼承使用繼承是為了減少 的冗餘,增強 ...