1. 程式人生 > >[Python3 填坑] 018 組裝類的幾個例子

[Python3 填坑] 018 組裝類的幾個例子

clas acl 編碼 eth 固定 繼承 內容 meta say

目錄

  • 1. print( 坑的信息 )
  • 2. 開始填坑
    • 2.1 MetaClass 舉例
    • 2.2 type 舉例
    • 2.3 MetaClass 舉例

1. print( 坑的信息 )

  • 挖坑時間:2019/04/07
  • 明細
坑的編碼 內容
Py024-2 MethodType 舉例
Py024-3 type 舉例
Py024-4 MetaClass 舉例



2. 開始填坑

2.1 MetaClass 舉例

from types import MethodType

class A():
    pass

def say(self):
    print("this is say()")

a = A()
a.say = MethodType(say, A)
a.say()

>>>
this is say()

2.2 type 舉例

# 1. 定義類應該具有的成員函數
def say(self):
    print("this is say()")
    
def eat(self):
    print("this is eat()")
    
# 2. 用 type 來創建一個類
A = type( "AName", (object, ), {"class_say":say, "class_eat":eat})

# 3. 像正常訪問一樣使用類
a = A()

a.class_say()
a.class_eat()

>>>
this is say()
this is eat()

2.3 MetaClass 舉例

# 元類寫法是固定的,必須繼承自 type

# 元類一般命名以 MetaClass 結尾
class ExampleMetaClass(type):
    def __new__(cls, region, gender, attrs):
        print("this is MetaClass")
        attrs['id_num'] = '9527'
        attrs['age'] = "18"
        return type.__new__(cls, region, gender, attrs)
    
# 元類定義完就可以使用
class Person(object, metaclass=ExampleMetaClass):
    pass

york = Person()
print(york.id_num)

>>>
this is MetaClass
9527

[Python3 填坑] 018 組裝類的幾個例子