python之建立類的兩種方法

昆昆歐粑粑發表於2018-08-22

python裡,類是物件導向的基礎。

建立類第一種普遍方式可能都清楚,用class關鍵字:

#第一種方法建立類
class A(object):

    def __init__(self, name):
        self.name = name

f = A("lkk")

這樣就簡單完成了一個A類的建立,我們嘗試列印一下f的型別:

print(type(f))  #列印f的型別,結果是A(我們寫的class A)

結果為

我們不妨在列印一下A的型別:

print(type(A))    #不妨再列印一下A的型別,居然是type

會發現結果是:

總結一下:type就是類的類

類的類,也就是元類。元類就是用來建立類的“東西”。你建立類就是為了建立類的例項物件,不是嗎?Python中的類也是物件。元類就是用來建立這些類(物件)的,元類就是類的類。

於是第二種建立類的方法:type動態建立類

type有一個方法:type(類名,父類名,方法名(字典形式))用來動態建立類

三個引數具體內容:

  • 第一個引數:要建立的class的名稱
  • 第二個引數:繼承的父類集合,Python支援多重繼承,如果只有一個父類,寫(obj,)
  • 第三個引數:class的方法名字典,字典內容為‘類裡面方法名稱’:‘寫好的函式名稱’,建立之後使用類方法名稱呼叫

舉個例子:

#第二種方法建立類

def func(self):    #第一個方法
    print('hello %s'%self.name)

def __init__(self,name,age):    #初始化方法
    self.name = name
    self.age = age

#type('叫什麼的類','繼承誰','它裡面有哪些方法')

Foo = type('Foo', (object,), {'talk':func,
                              '__init__':__init__})


f = Foo('lkh','20')
f.talk()
print(type(Foo))

等同於:

class Foo(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def func(self):
        print('hello %s' % self.name)

 

相關文章